【发布时间】:2016-04-23 12:24:31
【问题描述】:
我们知道 C++ 允许initialization of C-style arrays with zeros:
int a[5] = {0};
// or
int a[5] = {};
同样适用于 std::array
std::array a<int, 5> = {};
但是,这不起作用:
int a[5] = {33}; // in memory( 33, 0, 0, 0, 0 )
std::array<int, 5> = {33}; // in memory( 33, 0, 0, 0, 0 )
有没有办法在不使用vector 或algorhtm 的情况下用非零值初始化整个数组?
也许constexpr 能帮上忙?最好的解决方案是什么?
附:
GCC 提供this syntax
int a[5] = {[0 ... 4] = 33};
但我不确定它是否对其他编译器有效。
【问题讨论】:
-
也许你需要收紧要求,因为
int a[5] = {33, 33, 33, 33, 33}; -
好吧,谷歌搜索你的确切标题会得到:'大约 1,470,000 个结果'。也许里面有些东西可能有用。
-
@LightnessRacesinOrbit 就我个人而言,我更喜欢这样的限定词,它使 IMO 的讨论更加清晰。
-
@LightnessRacesinOrbit 人们,即使是程序员,也很少会说或用英语输入命名空间。讨论向量、映射和集合是很常见的,即使在 C++ 中,这些东西只存在于
std命名空间中。人们也讨论数组,根据上下文,他们可能指的是数组的任何一种形式,甚至是也是对象数组的向量。因此,需要一种方法来消除该术语的歧义。 -
从 C 风格改为 C 风格