C++ int a [n]在g ++中工作但不在vs2008中工作

gyo*_*dor 7 c++ arrays compiler-construction g++ visual-studio-2008

我有以下代码:

...
int n;
cin >> n;
int numbers[n];
...
Run Code Online (Sandbox Code Playgroud)

它使用g ++(我认为)在Mac上使用NetBeans进行编译,并且在Windows上无法使用VS2008进行编译.为什么让它与每个编译器一起工作如此困难?在分配数组之前,已知数组的大小.

编辑:我知道std::vector.实际上这是家庭作业的一部分,我开始在Mac上工作,然后回到家,并对它在VS2008上不起作用感到惊讶.感谢所有的答案.但我仍然认为如果编译器可以生成一些代码,例如alloc(123)值123是硬编码的,那么为什么它不能生成像alloc(n)n从一个int n或哪个内存地址获得的东西.默认情况下允许这样的东西似乎更合乎逻辑.

Dre*_*all 16

虽然数组的大小在分配之前是已知的,但直到运行时才知道它.这称为可变长度数组(VLA),是C99主义,由g ++支持,默认情况下启用扩展.显而易见,这不符合C++ 98/03,因此Visual C++完全有权拒绝它.

如果您真的想要运行时动态调整大小,请在堆上进行分配(通过new []).这将在任何地方工作,作为奖励,保护您免受堆栈溢出.

  • 实际上,不要使用`new []`.使用`std :: vector`. (7认同)

fre*_*low 12

因为数组的大小必须是标准C++中的编译时常量(见8.3.4§1).


小智 12

为什么不使用一些CPP真正喜欢的东西std::vector<int>