我有以下代码:
...
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),是一种 C99 主义,在 g++ 中由默认启用的扩展支持。明确地说,这不符合 C++ 98/03,因此 Visual C++ 完全有权拒绝它。
如果您确实想要运行时动态调整大小,请在堆上分配(通过 new[])。这将在任何地方都有效,并且作为奖励,可以保护您免受堆栈溢出的影响。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)