给定一个大小为256的数组映射,初始化它以使每个元素都为假的最佳方法是什么?
bool map[256];
for (int i=0; i<256; i++)
{
map[i] = false;
}
谢谢
答案 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 };