代码之家  ›  专栏  ›  技术社区  ›  L_J

是否可以在运行时在C++中生成变量名?[副本]

  •  3
  • L_J  · 技术社区  · 6 年前

    这个问题已经有了答案:

    我有按顺序命名的变量,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 回复  |  直到 6 年前
        1
  •  7
  •   Dan M.    6 年前

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

        2
  •  0
  •   Paul Belanger    6 年前

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

    您可以使用stl容器,例如 STD::载体 STD::数组

    例如:

    #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;
    }