【发布时间】:2014-06-30 22:58:46
【问题描述】:
Language-lawyer-wise,标准中的哪个条款禁止以下代码:
int arr[] (10, 42);
这将产生一个包含 10 个元素的数组,每个元素都初始化为 42。
【问题讨论】:
-
int arr[10]; std::fill_n(arr, 10, 42); -
对于内置数组的实际初始化,您将获得的最佳效果可能是
int arr_0[] = {MAGIC_REPEAT_MACRO(10, 42)};。 IIRC,BOOST_PP_REPEAT将允许这样做。骗子真的不包括 C++ AFAICT 中的初始化。 -
使用
constexpr,开心:)。编写一个构建数组的constexpr函数,从初始化程序中调用它。 -
@user3791991:你为什么认为
(10, 42)的意思是“产生10 个元素,每个元素初始化为42”?没有编译器会将第一个值视为计数,将下一个值视为初始值设定项。std::vector具有接受此类值的构造函数,例如std::vector<int> arr(10, 42);,但普通数组没有。 -
@RemyLebeau,如果假设的原因是这些内置类型“缺少构造函数”,那么为什么
int num(10);会起作用?这看起来也像是一个构造函数调用。
标签: c++ arrays initialization language-lawyer