为什么在vs代码中编写C++时,我们不能通过变量来定义数组大小呢?
我在Dev C++中输入了相同的代码,并且在Dev C++中支持这样的声明。
struct student_
{
char name[11];
char no[11];
int grade;
};
struct student_ stu[n]; // not supported in vs code, but supported in Dev C++
我希望这样的声明是正确的,但实际结果是错误的。
发布于 2019-07-21 22:48:58
Variable length arrays不是也从来不是标准C++的一部分。因此,静态分配数组的大小在编译时必须是已知的。一些编译器支持将此功能作为编译器扩展(例如,GCC就是这样做的),但它不是可移植的。使用std::vector
作为替代。
发布于 2019-07-21 22:50:41
C++中的数组是静态的,这就是为什么在编译时需要知道它们的大小,以便分配适当的空间。您可以使用变量初始化大小,但该变量在编译时必须具有已知的常量值。为此,您可以使用constexpr
关键字。
为了让您的示例正常工作,必须像这样声明n
:
constexpr size_t n = 5;
当您直接将一个数字写入大小初始值设定项中时,该值在编译时自然是已知的,因此也是有效的。
https://stackoverflow.com/questions/57134226
复制相似问题