C++为什么非const数组声明不好?

Joe*_*ass -1 c++ heap stack

如果我有以下两个陈述:

// OK
const int ARRAYSIZE = 5;
int x[ARRAYSIZE];

// NOT OK
int ARRAYSIZEBAD = 5;
int y[ARRAYSIZEBAD];
Run Code Online (Sandbox Code Playgroud)

我不用-pedantic-errors标志编译...为什么第二个例子是坏事?在什么情况下,最好使用new运算符进行动态分配?

eer*_*ika 6

C++为什么非const数组声明不好?

因为在编译时必须知道数组的长度.如果变量是非const的,那么它的值可能会在运行时更改,因此在编译时不会知道.只有编译时常量表达式可以用作数组的长度 - 因此const变量只能在观察到其初始化程序后用作数组的长度.

int[ARRAYSIZE]是一种类型.在编译时已知大小的要求扩展到所有类型,而不仅仅是数组类型.

在什么情况下最好使用动态分配......

如果在编译时不知道数组的长度,则需要动态分配.

当阵列很大时,您还需要非自动分配.这是因为为自动分配保留的内存通常非常有限.

...与新的运营商?

使用new-expression分配动态内存很少是优选的.std::vector通常在需要动态数组时使用.