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

q09*_*987 5 c++

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

bool map[256];

for (int i=0; i<256; i++)
{
    map[i] = false;
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Ida*_*n K 18

bool map[256] = { false };
Run Code Online (Sandbox Code Playgroud)

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


ken*_*ytm 15

bool map[256] = {false};
Run Code Online (Sandbox Code Playgroud)

(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).

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

  • @ q0987:C已经有了11年的布尔类型.例如,11年前C#不存在. (2认同)
  • `= {}`⁠⁠⁠⁠⁠吧 (2认同)

Ste*_*sop 7

像这样:

bool map[256] = { 0 };
Run Code Online (Sandbox Code Playgroud)

有人会这样说:

bool map[256] = {};
Run Code Online (Sandbox Code Playgroud)

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

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

具体而言,标准定义了在这个8.5.1/7(初始化列表比阵列短),和8.5/5(值初始化一个bool等同于用值0转换为对其进行初始化bool).