生成变量的名称

时间:2012-11-04 17:22:01

标签: c++ variables

我想使用for命令生成一些变量。看下面的代码:

for (char ch='a'; ch<='z'; ch++)
      int ch=0;

这只是一个例子,在运行上面的代码之后,我想要int a,int b,int c ......

另一个例子:

for (int i=0; i<10; i++)
      int NewiEnd=0;

例如,在运行上面的代码之后,我们将使用int New1End,int New2End等。

希望我足够清楚,我怎样才能在C ++中做这样的事情?

4 个答案:

答案 0 :(得分:7)

不,不可能,不完全是。但是,这是可能的:

std::map<char,int> vars;    
for (char ch='a'; ch<='z'; ch++)
      vars[ch] = 0;

std::cout << vars['a'] << vars['b'] << vars['c'];

您还可以拥有std::map<std::string, int>

std::map<std::string,int> vars;
for (int i=0; i<10; i++)
    vars["New" + std::to_string(i) + "End"] = 0;
std::cout << vars["New5End"];

答案 1 :(得分:4)

您在C或C ++中无法实现的目标。

答案 2 :(得分:4)

您似乎想要的是类型的地图:

std::map<std::string, int> ints;

这将允许您按名称调用“变量”:

ints["a"] = 0;
ints["myVariable"] = 10;

或者如您的示例中所示:

std::map<char, int> ints;
for (char ch='a'; ch<='z'; ch++)
   ints[ch] = 0;

如果您准备使用'a' - 'z',您可以使用一系列整数:

int ints['z' + 1];
ints['a'] = 0;
ints['z'] = 0;

但是这为'a'下面的ascii字符分配了不必要的空间。

答案 3 :(得分:2)

在C / C ++中,变量名称在编译和运行代码时已“消失”。您无法在运行时通过“反射”打印出现有变量的名称......更不用说创建新的命名变量了。寻找此功能的人发现,唯一可以做到的通用方法就是使用预处理器:

generic way to print out variable name in c++

预处理器理论上也可以应用于您的问题,并具有某些约束条件:

Writing a while loop in the C preprocessor

但是,阅读你的代码的任何人都可能会通过你的内心获得赌注,并且这样做是有道理的。星期天早上的懒惰和强烈的信念,这不是你(应该)想要的,这导致我不尝试写一个有效的例子。 :-)

(好奇的是,预处理器不是Turing-Complete,尽管有一些"interesting" experiments

C / C ++的本质是让您根据需要构建命名表。默认情况下,提供此功能的语言会让您为名称的运行时跟踪付费,无论您是否使用反射,并且这不符合此特定编译语言的精神。其他人给你的答案更加正确。