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