【发布时间】:2020-04-22 14:15:32
【问题描述】:
我最近更改了我的 C++ 编译器,我遇到了一个奇怪的错误,上面写着 ISO C++ 禁止可变长度数组。 我清楚地记得我以前的编译器没有遇到这个错误。这是我编写的代码 sn-p,只是为了检查这个新编译器的可靠性。
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
return 0;
}
In function 'int main()':
test.cpp:8:9: error: ISO C++ forbids variable length array 'a' [-Wvla]
int a[n]={0};
您会看到,即使用户在“n”中输入,编译器也会声明该数组的长度是可变的。 也欢迎对其他编译器版本提出建议!
【问题讨论】:
-
这正是错误所说的。标准 C++ 禁止在编译时长度未知的数组。一些编译器具有允许 VLA 的扩展,但它们通常不是一个好主意。
-
Variable-length arrays 不是 C++ 的一部分。一些编译器可能会将其添加为非标准扩展。请改用
std::vector。