为什么允许声明一个大小取决于用户输入的自动数组?

Flo*_*lla 15 c++ arrays stack variable-length-array

我正在使用MinGW来编译C++ 11,我发现这不会引发错误:

int S;
cin>>S;
char array[S];
Run Code Online (Sandbox Code Playgroud)

虽然这样做("'数组'的存储大小未知"):

char array[];
Run Code Online (Sandbox Code Playgroud)

对我来说,第一种情况下的大小也是未知的,因为它取决于用户输入的内容.

据我所知,自动数组在编译时分配在堆栈内存中.那么为什么第一个例子不会失败呢?

Car*_*ten 20

我没有足够的声誉来发表评论所以我正在使用答案.请不要对我残忍:-)

你显然不知道GNU GCC扩展可变长度数组.因此,您的第一个代码编译.

错误消息是不同的.您必须指定数组长度.

gcc-pedantic开关 - 启用此开关,编译器会将您的第一个代码报告为无效:

警告:ISO C++禁止变长数组'array'

另请阅读此主题在GCC/G ++编译器中使用-pedantic的目的是什么?

使用非常仔细的编译器扩展,因为如果您将代码移植到另一个编译器,那么您将遇到大麻烦.


Som*_*ude 19

事实并非如此.C++没有可变长度数组,尽管有些编译器允许它作为语言的扩展.