是否可以在C ++中在运行时构建变量名?

时间:2018-05-31 11:02:28

标签: c++ preprocessor

我有以有序方式命名的变量,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 ++中实现这一目标?

2 个答案:

答案 0 :(得分:7)

不,这是不可能的。但是,您可以将这些变量/值放入数组(或映射)并通过索引访问它们。

答案 1 :(得分:0)

预处理器在编译器之前完成它的工作。 因此#define可以在编译之前用作宏。 但是,无法在C ++中以这种方式在运行时进行评估。

您可以使用STL容器,例如 std :: vector std :: array

例如:

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    std::vector<int> vec {11,22,33,44,55,66};

    int k;
    cin >> k;                           // suppose user input '5'
    if (k > 0 && k < 6)
        cout << vec[k] << endl; 

    return 0;
}