无法在具有常量变量大小的类中创建堆栈分配数组

Can't create a stack allocated array in a class with a constant variable size

本文关键字:创建 堆栈 数组 分配 变量 常量      更新时间:2023-10-16

为什么这段代码不编译?

class MyClass
{
const int size = 5;
int arr[size];
};

该错误指出size是未声明的标识符。

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

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

如果希望每个Asize为 5,则变量应该是constexpr static成员。或者正如评论中所建议的那样,std::array<..., 5>.

声明数组时,需要一个大小的常量表达式。

调整尺寸static可以解决您的问题

class MyClass
{
const static int size = 5;
int arr[size];
};

通常,由于大小是固定的,因此您更喜欢std::array。(可选(可以将大小作为模板参数包含在内。

template <std::size_t N>
class MyClass
{
std::array<int, N> arr;
};

这是因为size是非静态的,并且您正在尝试"静态"访问该常量(也就是说,没有对象(。