Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将字符串转换为变量名或变量类型_C++_String - Fatal编程技术网

C++ 将字符串转换为变量名或变量类型

C++ 将字符串转换为变量名或变量类型,c++,string,C++,String,是否可以通过执行以下操作将字符串转换为变量(反之亦然): makeVariable("int", "count"); cout << apple; //a green round object 或 然后可以通过执行以下操作访问它: makeVariable("int", "count"); cout << apple; //a green round object cUT> p>你可能想看。不。C++是静态类型的,这与整个范例是违背的。 我以前见过通过在stl映

是否可以通过执行以下操作将字符串转换为变量(反之亦然):

makeVariable("int", "count");
cout << apple; //a green round object

然后可以通过执行以下操作访问它:

makeVariable("int", "count");
cout << apple; //a green round object

<代码> cUT> p>你可能想看。

不。C++是静态类型的,这与整个范例是违背的。

我以前见过通过在stl映射中存储变量来实现这种功能。

您可以使用映射

map<string, int> numbers;
numbers["count"] = 6;
cout << numbers["count"];
地图编号;
数字[“计数”]=6;

刚开始的程序员可以问关于每种语言的这个问题。有一组计算机语言对此问题的回答是“是”。这些是动态的交互式语言,比如BASIC、Lisp、Ruby、Python。但是想想看:为了方便程序员,变量名只存在于代码中。只有在程序运行时,如果有人随后在新代码中键入变量的名称,定义新变量才有意义。对于交互式语言环境来说,这是正确的,对于编译语言如C++或java来说,这是不正确的。在C++中,程序运行时,将创建虚构的新变量,没有人可以使用新变量来编写代码。
相反,您真正想要的是在运行时将名称与对象关联的能力,这样代码(而不是人)就可以使用该名称来查找对象。正如其他人已经指出的,C++标准库的
map
特性为您提供了这种能力。

不,这是不可能的。这种功能在脚本语言中很常见,比如露比和Python,但是C++和那些不同。在C++中,我们尝试尽可能多地完成程序的工作。有时我们可以做一些事情,即使是优秀的C++程序员也会找到一种方法来尽早完成编译。 如果知道要创建变量,请立即创建:

int count;
您可能事先不知道变量的值,因此您可以将其推迟到运行时:

std::cin >> count;
如果您知道您将需要一组变量,但不需要确切的变量数量,那么请创建一个或一个:

std::向量计数;

请记住,变量的名称只不过是一个名称,这是您以后引用变量的一种方式。在C++中,<>强>不可能也不利于在运行时延迟指定变量的名称。这样做只会使代码更复杂,程序更慢。

我想你不能生成动态变量,但你可以使用一些函数在任何外部文本文件中写入新变量及其值,并在需要时从该文件访问其值(u还可以通过从文本文件中删除动态变量来删除它。)

理论:变量是我们在内存中存储数据的地方,由名称标识,如果处理器不允许我们将数据存储在寄存器中,我们可以将数据存储在文本文件中,我们可以通过在文本文件中搜索它的标识(变量名称)来访问它的值,我们的数据将在它旁边


这只是一个想法,它应该会起作用,但我想它不会很简单,你的程序将不得不在速度方面付出代价。

至少在速度方面(反之亦然)预处理器语句StrigTime:C++ >代码>有可能。参见如何将C++变量名转换成字符串。

yh,这是有用的,但我想动态创建从“命令行”@ FielpE指定的变量:您可以读取那里使用的字符串(“计数”)。从
cin
@Flyphe--完全有可能生成一个基于输入改变其功能的程序;不可能生成一个在程序运行时为数据创建新名称的程序。要实现的关键是,这些名称--变量名--只存在于源代码中,在程序运行时没有任何功能M是运行的。创建新的数据不会有任何用途。地图、向量、数组、列表等可以根据用户输入保存任意数量的任意数据,但是这与创建新变量无关。当然,在运行时创建变量是不可能的。C++中,C++之间有明显的区别。在编译时,代码可以被烘烤;数据可以在运行时被烘烤或获取。好的C++程序员总是在编译时尽可能多地做,因为这意味着在运行时要做的工作更少,这意味着程序更快。这也是C++程序具有这种速度声誉的原因。在编译时输入,所以在运行时要做的就是填写它们。可能重复yes,但用于打印名称和变量值的函数在调试时可能很有用,而不是存在状态已知的前置处理器