c++ - 崇高文本 3 中的 ISO C++ 错误禁止可变长度数组

标签 c++ c++11 gcc c++14 iso

我最近更改了我的 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]<<" ";
}

关于c++ - 崇高文本 3 中的 ISO C++ 错误禁止可变长度数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59588338/

相关文章:

c++ - 每隔一段时间捕捉一次相机帧

c++ - 在第三方函数中使用 vector 引用时出现意外错误

c++ - 在临时对象上调用 lvalue-ref 限定成员函数时 GCC 错误消息的措辞

gcc - 为 gcc 生成依赖项

Android oboe c++ E/AudioALSAPlaybackHandlerBase : openPcmDriver(), pcm_start(0xeff82fc0) 由于无法启动 channel 而失败:管道损坏

c++ - 如果 C++ 中的长度大于 n,则跳过读取 INI 文件中的一行

c++ - 在 C++ 中转换树

c++ - for 循环中的 Lambda - 静态变量

c++ - 类外的默认构造函数/析构函数?

linux - 如何将备用 glibc 与现有的 libstdc++ 一起使用?