无法在具有恒定可变大小的类中创建堆栈分配数组

Vit*_*kyi 0 c++ arrays class constants

为什么这段代码不能编译?

class MyClass
{
    const int size = 5;
    int arr[size];
};
Run Code Online (Sandbox Code Playgroud)

错误说这size是未声明的标识符。

Nic*_*las 6

默认成员初始值设定项(= 5;在您的代码中)仅指定默认情况下非静态数据成员的初始化方式。构造函数可以给它一个不同的值。因此,编译器无法知道它在编译时的值是什么。

因此,您不能A::size在编译时常量表达式中使用。就像你声明一个数组的大小一样。

如果您打算让每个Aasize为 5,那么该变量应该是一个constexpr static成员。或者按照评论中的建议,一个std::array<..., 5>.