无法在具有常量变量大小的类中创建堆栈分配数组
Can't create a stack allocated array in a class with a constant variable size
为什么这段代码不编译?
class MyClass
{
const int size = 5;
int arr[size];
};
该错误指出size
是未声明的标识符。
默认成员初始值设定项(代码中的= 5;
(仅指定默认情况下如何初始化非静态数据成员。构造函数可以为其提供不同的值。因此,编译器无法知道它在编译时的值是什么。
因此,不能在编译时常量表达式中使用A::size
。就像声明数组的大小一样。
如果希望每个A
的size
为 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
是非静态的,并且您正在尝试"静态"访问该常量(也就是说,没有对象(。
相关文章:
- 在堆栈上创建类实例
- 如何在C++中为堆栈动态创建结构?
- 为什么在堆栈和堆上创建变量会产生相同的程序集代码?
- 作为指针注入类后重新创建堆栈对象不好吗?
- 在 C++ 中在堆栈上创建实例时如何保持多态性?
- 无法在具有常量变量大小的类中创建堆栈分配数组
- "new"创建的实例的所有成员变量是否都存在于堆上而不是堆栈上?
- 堆还是堆栈用于创建对象?
- 在堆或堆栈上分配的动态创建的字符串 - C
- 使用在堆栈上创建的对象调用虚拟函数
- 如何以编程方式区分在内存的堆和堆栈部分创建的对象
- 创建堆栈时出现问题!(街机游戏)
- 有什么方法可以检测我的类的对象是否在堆栈上创建
- 创建自己的owner_ptr类;在传递堆栈或静态分配的地址时如何避免UB?
- 受保护的析构函数禁用在堆栈上创建派生类的对象?
- 当外部源代码中发生异常时,无法正确使用自创建的小型转储文件的堆栈跟踪
- 创建堆栈VM时的分割故障
- 使用Push、Pop等在C++中创建堆栈
- 为什么无法创建堆栈大小小于默认大小的线程
- 二进制搜索树创建堆栈-overfow