【问题标题】:builtin array initialization without constexpr size没有 constexpr 大小的内置数组初始化
【发布时间】:2017-06-01 08:25:47
【问题描述】:

我无法弄清楚如何在不使用constexpr 维度的情况下声明内置数组。也就是说,以下块对我来说非常有用。我知道内置数组具有固定大小,必须在编译时通过constexpr 定义大小来指定。

int size;
int arr[size];

【问题讨论】:

    标签: c++ arrays c++11 declaration constexpr


    【解决方案1】:

    不一定是通过constexpr,那是从 C++11 引入的东西。

    你可以通过一个简单的数字来分配大小

    int arr[12];
    

    或常数

    int const size = 7;
    int arr[size];
    

    或 C 风格的宏

    #DEFINE  size  5
    
    int arr[size];
    

    但你是对的:下面的代码

    int size = 11;
    int arr[size];
    

    不是正确的 C++。

    但是在某些版本的 C 中是合法的(如果我没记错的话,仅在 C99 中)并且 C++ 编译器通常也是 C 编译器。所以通常是宽容的。

    您可以尝试使用特定选项进行编译,以对语言进行严格检查;例如,对于 g++ 和 clang++,我使用 -ansi -pedantic

    【讨论】:

    • 非常感谢,从现在开始我将使用-pedantic,而-ansi由于某种原因不起作用
    【解决方案2】:

    也可以这样初始化大小为n的数组:

    int n = 123;
    int* a;
    a = new int[n];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多