为什么使用这种类型的声明

int nArraySize = 7;
char szName[nArraySize] = "Mollie";

返回此错误:
error: variable-sized object 'szName' may not be initialized

但是当我将'arraySize'变量声明为'const int'时,它起作用了吗?
const int nArraySize = 7;
char szName[nArraySize] = "Mollie";

最佳答案

首先必须说的是,在C++语言中,数组声明的大小部分必须为整数常量表达式(ICE)。用初始化程序声明的const int对象可以在ICE中使用。 int对象不能在ICE中使用。那是它的正式部分。

但是,根据错误消息判断,您的C++编译器作为非标准扩展支持C++中的 C99样式的可变长度数组(VLA)。这意味着您可以在编译器中使用非常量表达式在数组声明中指定大小。即使VLA本身受支持,此类数组仍然无法初始化。 C99中的VLA规范禁止这样做,而这正是C++编译器“继承”其规范的方式。

换句话说,与其他答案相反,此代码可能会被您的C++编译器接受

int nArraySize = 7;
char szName[nArraySize];

即使它在形式上是非法的C++。触发错误的是= "Mollie"部分。

关于c++ - 数组声明中的const int和int之间的区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17253623/

10-17 01:32