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

标签 c++ arrays visual-studio-2008 compiler-construction g++

我有以下代码:

...
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/

相关文章:

c++ - 在 C++ 中以 mm/dd/yyyy 获取当前时间

c++ - 甚至无法在 Sublime Text 3 中构建一个简单的程序

多维动态数组中的 C++ 对象构造

c++ - 当代码具有从 char 到 wchar_t 的显式转换或反之亦然时,要求 vc++ 编译器显示编译器警告

c# - 如何断开匿名事件?

c++ - 智能感知 : no instance of overloaded function "sqrt" matches the argument list argument types are: (double *)

c++ - 我想放弃对邮件正文所做的更改

javascript - 查询以匹配数组输入

javascript - React 渲染数组键和对象

c# - 分析 SQL Server 性能问题?