C++:迭代创建变量

4 c++ variables loops

我只是想知道是否有办法在每次执行循环时创建一个具有新名称的新变量。

例如:

#include <iostream>
int main()
{
    for (int x = 1 ; x<=5 ; x++)
       int a_x;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

应创建 5 个新变量,名称为 a_1 , a_2......a_5

上面的代码只是显示了我正在寻找的东西,而不是答案。

编辑: 寻找不使用数组的出路。

- 有学习意愿的 C++ 新手:)

Rei*_*ica 5

不,没有办法(直接)执行您概述的操作。以下是几种可能的替代方案:

  1. 首先,如果您不需要在循环外访问“变量”,只需使用普通的局部变量:

    for (int x = 1; x <= 5; ++x) {
      int a = whatever;  // This will be freshly redeclared & reinitialised in each iteration
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果在编译时已知迭代的边界,则可以使用数组:

    std::array<int, 5> a;
    for (int x = 0; x < a.size(); ++x) {
      a[x];
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 如果边界仅在运行时已知,请使用动态数组:

    std::vector<int> a(the_runtime_size);
    for (int x = 0; x < a.size(); ++x) {
      a[x];
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 如果您出于某种原因确实需要单个变量(并且您知道编译时的数量),则可以使用Boost.Preprocessor 使用预处理器技巧。但这高于初学者水平:

    #include <boost/preprocessor>
    
    #define DECLARE_MY_VARIABLE(z, idx, name) \
      int BOOST_PP_CAT(name, BOOST_PP_CAT(_, idx));
    
    BOOST_PP_REPEAT(5, DECLARE_MY_VARIABLE, a)
    
    Run Code Online (Sandbox Code Playgroud)

    上面的代码将扩展为:

    int a_0; int a_1; int a_2; int a_3; int a_4;
    
    Run Code Online (Sandbox Code Playgroud)

    您当然可以进一步采取这几个步骤,让每个变量都具有不同类型,或者按名称而不是按索引命名它们。它只需要更多的宏观魔法。

    免责声明:除非您非常清楚地知道您需要它,否则不要使用这种方法。即便如此,在你真正这样做之前,也要重新考虑两次。如果您仍然这样做,请对其进行大量记录。像这样的东西通常应该隐藏在一个漂亮干净的用户友好界面下的库深处。

  • @KarolyHorvath 我实际上已经添加了一个明确的免责声明,以防万一。 (2认同)