【发布时间】:2014-02-11 23:22:16
【问题描述】:
以下代码在 gcc 4.8 和 Clang 3.2 下编译:
int main()
{
int size = 10;
int arr[size];
}
C++ 标准的 8.3.4/1 规定数组的大小必须是整数常量表达式,size 似乎不是。这是两个编译器中的错误,还是我遗漏了什么?
最新的 VC++ CTP 拒绝带有这个有趣消息的代码:
error C2466: cannot allocate an array of constant size 0
有趣的部分是它似乎认为size 是零。但至少它拒绝了代码。 gcc 和 Clang 不应该做同样的事情吗?
【问题讨论】:
-
可变长度数组仅是 C 而不是 C++。但是,gcc 和 clang 支持它作为扩展。
-
可能是 C++1y 和/或 C99 中提出的可变长度数组的扩展?
-
std::valarray在 C++1y 中提出 -
@BryanChen,您可能正在考虑
std::dynarray,但它和 VLA 都在 TS AFAIK 中。 -
这是我一段时间以来回答的更有成效的问题之一。在试图加强我对常量表达式的回答时,我发现了一个关于未定义行为的花絮,这导致我提出了这个问答Why do constant expressions have an exclusion for undefined behavior?。
标签: c++ arrays c++11 compile-time-constant variable-length-array