如何在C++中"compose"变量名称?
How to "compose" variable names in C++?
假设如下:
int val1, val2, val3, choice;
while (expression) {
cin >> choice;
if (choice == 1) {
val1 += expression;
} else if (choice == 2) {
val2 += expression;
} else if (choice == 3) {
val3 += expression;
} else {
expressions..;
}
}
是否有任何方法将变量名视为字符串,以便能够"组合"它们?这在上面的例子中很有用,或者在for循环中更好,将计数器值添加到变量名中,以便在每个循环中调用不同的变量。
有了这样的特性,上面的例子就变成了:int val1, val2, val3, choice;
while (expression) {
cin >> choice;
if (choice == 1 || choice == 2 || choice == 3) {
['val' + choice] += expression;
} else {
expressions..;
}
}
我不认为我选择了最好的例子来代表这种特性的好处,无论如何,我曾经在PHP和SQL中做过很多这样的事情,例如在循环中使用计数器的值来每次选择数组的不同项,并在新的SQL语句中声明它。
有谁知道这样的东西在c++中是可能的吗?
如果有什么不清楚的地方就告诉我。
谢谢:)
尝试一个数组:
int vals[3] = {0}, choice;
while (expression) {
cin >> choice;
if (choice >= 1 && choice <= 3) {
// arrays are indexed starting at 0
vals[choice-1] += expression;
} else {
// ...
}
}
真正的解决方案是一个数组。但是如果你真的想给你的值附加一个不同的名字,你可以使用map:
std::map<std::string, int> vals;
while (expression) {
cin >> choice;
if (choice == 1 || choice == 2 || choice == 3) {
vals[std::string{"val"} + choice] += expression;
} else {
expressions..;
}
}
映射的内容可能看起来像这样:
"val1" -> 4
"val2" -> 3
"val3" -> 12
键中包含字符串的映射将是最接近动态名称的东西。
但是我可以向你保证,在这个特定的情况下,数组解决方案是更好的。
变量名是编译时对象,而不是运行时对象。
当你需要用低整数来标识对象时,使用数组是很常见的。
int val[3]; // val1, val2, val3
// -1 because arrays are 0-based
val[choice-1];
您可以使用散列表(称为unordered_map)对字符串做同样的事情,就像其他人建议的那样。但是unordered_maps是相当重量级的对象。您也可以使用#define和##标记粘贴操作符,但不能粘贴变量。只有编译时标识符可以与##连接。
相关文章:
- 你能重载对象变量名本身返回的内容吗
- 在C/C++中将变量名定义为__00000001有什么好处吗
- C++变量名(可以将 main 声明为变量,但对于其他函数名称则不然)
- C++ - 声明中变量名后面的括号
- 如何使替换 c 函数的变量名成为错误?
- 是否可以创建没有变量名的变量
- fstream库,试图创建一个变量名为(c++)的文件
- 一个数组C++中的消息和变量名
- 在变量名后声明带有 () 的非内部类型与不使用变量名的行为不同。即 std::map<int,char>x(); - 这是怎么回事?
- 数组的变量名和该数组的地址有什么区别?
- 如何将变量名设置为字符串?C++
- 类中具有相同变量名的多重继承
- 如何在从.txt文件中读取时不重复相同的变量名
- 在循环中使用相同的变量名可以吗
- C++保留符号作为C变量名
- 在C++中,在给定的相同作用域内声明相同的变量名
- 为什么类名与"::"一起使用在变量名之前?
- 在同级之间继承相同的变量名
- __COUNTER__变量名中
- 按变量名遍历结构