当前位置:  开发笔记 > 编程语言 > 正文

C++数组初始化

如何解决《C++数组初始化》经验,为你挑选了2个好方法。

这种形式是将数组初始化为全0

char myarray[ARRAY_SIZE] = {0} 所有编译器都支持?,

如果是这样,是否有类似于其他类型的语法?例如

bool myBoolArray[ARRAY_SIZE] = {false} 

AnT.. 132

是的,所有C++编译器都支持这种初始化形式.它是C++语言的一部分.实际上,它是从C语言到C++的习惯用语.在C语言中= { 0 }是一种惯用的通用零初始化器.在C++中也几乎就是这种情况.

由于这个initalizer是通用的,对于bool数组你不需要一个不同的"语法".0作为bool类型的初始化器也是如此

bool myBoolArray[ARRAY_SIZE] = { 0 };

保证用它初始化整个数组false.以及

char* myPtrArray[ARRAY_SIZE] = { 0 };

保证用类型的空指针初始化整个数组char *.

如果您认为它提高了可读性,那么您当然可以使用

bool myBoolArray[ARRAY_SIZE] = { false };
char* myPtrArray[ARRAY_SIZE] = { nullptr };

但关键是= { 0 }变体会给你完全相同的结果.

但是,在C++中= { 0 }可能不适用于所有类型,例如枚举类型,不能用积分初始化0.但是C++支持更短的形式

T myArray[ARRAY_SIZE] = {};

即只是一双空的{}.这将默认初始化任何类型的数组(假设元素允许默认初始化),这意味着对于基本(标量)类型,整个数组将被正确地零初始化.



1> AnT..:

是的,所有C++编译器都支持这种初始化形式.它是C++语言的一部分.实际上,它是从C语言到C++的习惯用语.在C语言中= { 0 }是一种惯用的通用零初始化器.在C++中也几乎就是这种情况.

由于这个initalizer是通用的,对于bool数组你不需要一个不同的"语法".0作为bool类型的初始化器也是如此

bool myBoolArray[ARRAY_SIZE] = { 0 };

保证用它初始化整个数组false.以及

char* myPtrArray[ARRAY_SIZE] = { 0 };

保证用类型的空指针初始化整个数组char *.

如果您认为它提高了可读性,那么您当然可以使用

bool myBoolArray[ARRAY_SIZE] = { false };
char* myPtrArray[ARRAY_SIZE] = { nullptr };

但关键是= { 0 }变体会给你完全相同的结果.

但是,在C++中= { 0 }可能不适用于所有类型,例如枚举类型,不能用积分初始化0.但是C++支持更短的形式

T myArray[ARRAY_SIZE] = {};

即只是一双空的{}.这将默认初始化任何类型的数组(假设元素允许默认初始化),这意味着对于基本(标量)类型,整个数组将被正确地零初始化.


在c ++ 0x中,你可以初始化这样的东西
在我的编译器(qt creator 2.4.1 - qt version 4.8.0)上,如果我写`bool myBoolArray [ARRAY_SIZE] = {false};`数组全部初始化为false,但如果我写`bool myBoolArray [ARRAY_SIZE] = {true};`只有第一个元素设置为true,而其他所有元素都设置为false.任何解释?

2> incises..:

请注意,'='在C++ 11通用初始化语法中是可选的,并且它通常被认为是更好的写入样式:

char myarray[ARRAY_SIZE] {0}

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有