【发布时间】:2018-05-31 21:03:30
【问题描述】:
我有以有序方式命名的变量,i1、i2、i3……我试图在运行时使用变量名称的数字部分访问这些变量。
以下是我尝试用于解决此问题的代码。它不能正常工作。
#include <iostream>
using namespace std;
#define CreateVariable(c,v) c##v
int main()
{
int i1(11), i2(22), i3(33), i4(44), i5(55);
cout << CreateVariable(i, 3) << endl; // This is working and prints "33"
int k;
cin >> k; // suppose user input '5'
if (k > 0 && k < 6)
cout << CreateVariable(i, k) << endl; // This is not working
return 0;
}
是否有可能在 C++ 中实现?
【问题讨论】:
-
不,你不能。
#define甚至在编译之前就被处理了。但是你也许可以在使用关联数组后得到你想要的实用程序。 -
预处理器指令甚至在你的编译器看到你的代码之前就被评估了。
-
第二个例子扩展为
cout << ik << endl。如果k的值为0,它不会扩展到i0。无论如何,不要使用宏,而是考虑使用数组(或在 C++ 中,标准库中的容器之一)并按索引访问元素。
标签: c++ preprocessor