记住以下代码:
int main()
{
int n = 3;
int arr[n] = { 1, 2, 3 };
}
GCC在C99模式下正确地出错error: variable-sized object may not be initialized
并且clang在C ++模式下给出了相同的错误。但是在C ++模式下,GCC并没有抱怨。这会让我相信它可能是他们C extensions VLA page未记录的延伸。我也找不到匹配的错误报告。任何人都可以验证这是扩展程序还是现有的错误报告?
答案 0 :(得分:3)
这个新行为实际上是在中提到的,因为我怀疑它可能与GCC 4.9 release notes有关:
G ++支持C ++ 1y可变长度数组。 G ++支持 GNU / C99风格的VLA很长一段时间,但现在另外支持 初始化程序和lambda通过引用捕获。在C ++ 1y模式中,G ++会 抱怨草案标准不允许的VLA使用, 例如形成指向VLA类型的指针或将sizeof应用于VLA 变量。请注意,现在看来,VLA不会成为其中的一部分 C ++ 14,但它将成为单独文档的一部分,然后可能是C ++ 17。
请注意,此版本的C ++默认标准模式仍为gnu++98/gnu++03
。