我有以下代码:
...
int n;
cin >> n;
int numbers[n];
...
它是在 Mac 上使用 g++(我认为)使用 NetBeans 编译的,它不是在 Windows 上使用 VS2008 编译的。为什么让它与每个编译器一起工作如此困难?数组的大小在分配之前是已知的。
编辑:我知道 std::vector
.实际上,这是家庭作业的一部分,我在 Mac 上开始工作,然后回到家,惊讶地发现它在 VS2008 上不起作用。感谢所有的答案。但我仍然觉得合乎逻辑的是,如果编译器可以生成一些代码,如 alloc(123)
值 123 是硬编码的,为什么它不能生成类似 alloc(n)
的东西?你从哪里得到n
来自包含 int n
的内存地址或者其他的东西。默认情况下允许这样的事情似乎更合乎逻辑。
最佳答案
虽然数组的大小在分配之前是已知的,但直到运行时才知道。这被称为可变长度数组 (VLA),是 C99ism,在 g++ 中由默认启用的扩展支持。明确地说,这不符合 C++ 98/03,因此 Visual C++ 完全有权拒绝它。
如果您真的想要运行时动态调整大小,请在堆上分配(通过 new[])。这将适用于任何地方,并且作为奖励,保护您免受堆栈溢出。
关于C++ int a[n] 在 g++ 中工作但在 vs2008 中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3324312/