gpt4 book ai didi

c++ - 数组声明中 const int 和 int 的区别?

转载 作者:搜寻专家 更新时间:2023-10-31 01:09:12 25 4
gpt4 key购买 nike

为什么要这样声明

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)。可以在 ICE 中使用使用初始化程序声明的 const int 对象。 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com