C++ 为什么C++;编译器是否允许在编译时在堆栈上创建大小未知的数组?
我试图理解在编译时在堆栈上创建未知大小的数组时会发生什么。让我们考虑一下这个代码:C++ 为什么C++;编译器是否允许在编译时在堆栈上创建大小未知的数组?,c++,gcc,stack,C++,Gcc,Stack,我试图理解在编译时在堆栈上创建未知大小的数组时会发生什么。让我们考虑一下这个代码: int main() { int x; cin >> x; int tab[x]; } 我发现了很多关于这个说法的信息,你不能在栈中创建一个未知大小的数组,但是我没有发现任何信息,为什么C++编译器允许它,或者他们中的一些人可以做?创建这样的数组时会发生什么?它是在堆栈上创建的还是已经在堆上创建的 GCC编译器是否有一些选项可以打开,因为这样的构造将被视为错误或至少是警告?
int main()
{
int x;
cin >> x;
int tab[x];
}
<>我发现了很多关于这个说法的信息,你不能在栈中创建一个未知大小的数组,但是我没有发现任何信息,为什么C++编译器允许它,或者他们中的一些人可以做?创建这样的数组时会发生什么?它是在堆栈上创建的还是已经在堆上创建的
GCC编译器是否有一些选项可以打开,因为这样的构造将被视为错误或至少是警告?C++不允许可变长度数组(VLA) 然而,最新的C标准确实如此,因此有时可以将其作为一个扩展,比如GCC
编译时,请确保显式选择一种语言(如果可以,请选择C++17或更高版本),并要求进行迂腐(严格符合标准)的行为1)VLAS是非标准C++(如标准C++中不允许的)。不过,一些编译器扩展使它们成为可能。2)“为什么C++编译器允许它”没有C++编译器这样的东西。可变长度数组古老的做法是在运行时声明数组时使用动态内存。现在,在C++中,你应该使用“代码> STD::vector < /Cord>”。BTW不被称为“表”,但是数组和
-pedantic errors
来代替-Werror=vla