3

我只是想知道为什么这在 Clang 4.0 中有效:

unsigned cnt = 42;
int k[cnt];

但这不会:

unsigned cnt = 42;
string bad[cnt];

我刚刚检查了 C++ 入门第 5 版。它说:

维度必须在编译时已知,这意味着维度必须是常量表达式

如果这是真的,为什么会int k[cnt];起作用?

4

3 回答 3

14

这两个片段都不能在 C++ 中工作。

但是,在 C 中,可以使用非常量表达式作为数组大小。一些编译器(例如,没有-pedantic选项的 GCC)支持 C++ 代码中的 C 功能。

至于元素类型之间的区别,它是特定于编译器的。GCC 编译两者。在这种情况下,clang++ 禁止非 POD 类型(例如std::string)。

于 2013-02-10T04:39:14.217 回答
0

clang 4.0 实际上是苹果 xcode clang 吗?我认为这实际上是 3.1 版。clang 本身提供了一个很好的解释:

warning: variable length arrays are a C99 feature
      [-Wvla-extension]
    int k[cnt];
于 2013-02-10T19:57:06.770 回答
0

您使用的是什么编译器,我使用的是 gcc,并且 const 和 nonconst 都可以正常工作。

这不是 c 的问题,数组不是通过变量定义的,只有宏和 const 表达式。

这是编译器的解释问题,我怀疑它与标准有关。

于 2013-02-10T04:42:40.847 回答