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

Convert string to variable name or variable type

本文关键字:变量 类型 变量名 字符串 转换      更新时间:2023-10-16

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

makeVariable("int", "count");

string fruit;
cin >> fruit;    // user inputs "apple"
makeVariable(fruit, "a green round object");

,然后可以通过以下方式访问它:

cout << apple; //a green round object

提前感谢!

不,这不可能。这类功能在Ruby和Python等脚本语言中很常见,但c++的工作方式与它们非常不同。在c++中,我们试图在编译时尽可能多地完成程序的工作。有时我们可以在运行时做一些事情,即使这样,优秀的c++程序员也会在编译时就找到一种方法来做这些工作。

如果你知道你要创建一个变量,那么马上创建它:

int count;

你可能事先不知道变量的值,所以你可以推迟到运行时:

std::cin >> count;

如果你知道你将需要一个变量集合,但不知道有多少个变量,那么创建一个映射或向量:

std::vector<int> counts;

请记住,变量的名称只是一个名称——一种稍后引用变量的方式。在c++中,是不可能的在运行时延迟赋值变量名是没有用的。这只会使你的代码更复杂,程序更慢。

可以使用地图

map<string, int> numbers;
numbers["count"] = 6;
cout << numbers["count"];

对于每一种语言,初级程序员都会问这个问题。有一组计算机语言对这个问题的回答是肯定的。这些都是动态的交互式语言,如BASIC, Lisp, Ruby, Python。但是考虑一下:变量名只存在于代码中,这是为了方便程序员。只有在程序运行时定义一个新变量才有意义,如果有人随后在新代码中键入变量的名称。这对于交互式语言环境是正确的,而对于像c++或Java这样的编译语言则不是正确的。在c++中,当程序运行时,假想的新变量将被创建,周围没有人可以键入代码来使用这个新变量。

您真正想要的是在运行时将名称与对象关联起来的能力,以便代码(而不是人)可以使用该名称来查找对象。正如其他人已经指出的,c++标准库的map特性为您提供了这种能力。

您可能需要查看c++ map

No。c++是静态类型的,这违背了整个范例。

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

至少对于(反之亦然),有可能使用预处理器语句stringify #。关于如何将c++变量名转换为字符串,请参阅以下答案。

我猜你不能创建动态变量,但你可以使用一些函数在任何外部文本文件中编写一个新变量及其值,并在需要时从该文件中访问它的值(你也可以通过从文本文件中删除动态变量来删除它)

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

这只是一个想法,它应该工作,但我想这将不是很简单,我们的程序将不得不支付速度