【发布时间】:2014-09-19 17:21:46
【问题描述】:
我只是跳入 C++,来自 C
在 C (89/90) 中,const 实际上不是常量(与 #define'd、enum 或文字相反),而是只读一次。即,我可以:
const int x = rand();
这很好 - 直到运行时才知道x 的意义。因此,我不能
int arr[x]; // error - x is not a compile-time constant
然后,C 标准之一(99?)继续前进并允许可变长度数组。虽然我通常在 C 中针对 ANSI 标准进行编码,但现在我正在尝试使用 C++11,这实际上产生了影响。
据我所知,C++ 不允许变长数组。但是,许多编译器允许它作为扩展(GCC ?)。问题是,现在我正在尝试学习 C++11,我不知道我正在编写的代码是有效的 C++,还是扩展了 C99 兼容性的 C++。例如:
std::default_random_engine e{};
std::uniform_int_distribution<int> d{};
const int x{d(e)};
int arr[x]; // compiles
我不知道这是否是有效的 C++。显然,x 的值直到运行时才知道。我想我可能不明白C和C++的区别const?
【问题讨论】:
-
无效。使用标志
-std=...其中...是一个标准,例如c++11或c++98. -
你也可以使用
-pedantic -
@juanchopanza 我实际上确实使用
-std=c++11进行了编译,并且clang 没有产生任何警告。按照 Shafik 的建议使用-pedantic标志会弹出警告! -
在 C++11 中无效,但 C++14 允许具有运行时大小的堆栈数组
-
@JohannesSchaub-litb,数组扩展 TS 没有进入 C++14。
标签: c++ c arrays c++11 constants