我最近更改了C ++编译器,并且遇到一个奇怪的错误,该错误说ISO C ++禁止使用可变长度数组。
我清楚地记得以前的编译器未遇到此错误。这是我编写的代码片段,目的是检查此新编译器的可靠性。

#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”作为输入,编译器也会指出该数组具有可变长度。
也欢迎提供有关其他编译器版本的建议!

最佳答案

std::vector替换VLA:

#include <iostream>
#include <vector>

int main()
{
    int n;
    std::cin>>n;
    std::vector<int> a(n);  // was VLA: int a[n];
    for(int i=0;i<n;i++)
        std::cin>>a[i];
    for(int i=0;i<n;i++)
        std::cout<<a[i]<<" ";
}

09-10 05:25
查看更多