有没有更好的方法来初始化数组?

时间:2010-10-30 15:04:55

标签: c++

给定一个大小为256的数组映射,初始化它以使每个元素都为假的最佳方法是什么?

bool map[256];

for (int i=0; i<256; i++)
{
    map[i] = false;
}

谢谢

5 个答案:

答案 0 :(得分:18)

bool map[256] = { false };

编辑:有关合法性的标准参考,请参阅下面的答案。

答案 1 :(得分:15)

bool map[256] = {false};

(C ++也允许bool map[256] = {};。上面也适用于C语言。)

这会将map[0]设置为false,并对其余255个成员进行“默认初始化”(C ++98§8.5.1/ 7:“如果初始化程序较少列表中的比聚合中的成员要多,那么未明确初始化的每个成员都应默认初始化“;C99§6.7.8/ 21)。

对于bool,“default-initialize”表示设置为(bool)0,即false(C ++98§8.5/ 5;C99§6.7.8/ 10)。< / p>

请注意,如果要初始化为true,则此方法不起作用。

答案 2 :(得分:7)

像这样:

bool map[256] = { 0 };

有人会这样说:

bool map[256] = {};

但对我来说,这看起来有点奇怪。

为什么使用“0”而不是“假”?这不是什么大不了的事,但我这样做是因为数组初始化器实际上填充到数组的大小为0 ,而不是第一个元素的副本。由于元素1到255的初始化是根据值“0”(当然转换为false)来定义的,所以我认为元素0也没有用“0”初始化。在标量类型的过短的初始化列表的末尾加上“0”让我想起了真正发生的事情。

具体来说,标准将此定义为8.5.1 / 7(初始化列表短于数组),8.5 / 5(初始化bool的值相当于初始化它,值0转换为{{ 1}})。

答案 3 :(得分:3)

如果没有其他理由,最好的选择可能是使用矢量:

std::vector<bool> map(256, false);
然而,

vector<bool>是一种与您的期望完全不同的专业化。根据具体情况,您可能更喜欢:

std::vector<char> map(256, false);

答案 4 :(得分:2)

在C ++中,X = {0}是惯用的通用零初始化器。这是C的一个特色。

bool map[256] = { 0 };