在Linux或Windows下定义数组时的区别

Jac*_*kie 1 c++

这是一个定义数组的简单代码.我注意到这个代码在Linux(OpenSue,gcc编译器)下可以工作(编译和运行),但它在Windows系统下不起作用.编译器提供了错误提示.有人知道原因吗?谢谢!

#include <iostream>
using namespace std;

int main()
{
    int N;
    cin>>N;
    int ar[N];
    ar[0]=0;
    cout<<"ar[0]= "<<ar[0]<<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Kon*_*lph 12

代码无效C++,因为C++不允许像您一样声明具有可变大小的(堆栈分配的)数组.这样做的原因是C++提供了更好的机制来声明动态大小的数组,使用std::vector其标准库中的类:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    int N;
    cin >> N;
    vector<int> ar(N);
    ar[0] = 0;
    cout << "ar[0] = " << ar[0] << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

g++ (默认情况下,您在Linux上使用的编译器)允许通过编译器扩展.