当前位置:嗨网首页>书籍在线阅读

05-C++11数组初始化方法

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

4.1.3 C++11数组初始化方法

第3章说过,C++11将使用大括号的初始化(列表初始化)作为一种通用初始化方式,可用于所有类型。数组以前就可使用列表初始化,但C++11中的列表初始化新增了一些功能。

首先,初始化数组时,可省略等号(=):

double earnings[4] {1.2e4, 1.6e4, 1.1e4, 1.7e4}; // okay with C++11

其次,可不在大括号内包含任何东西,这将把所有元素都设置为零:

unsigned int counts[10] = {};   // all elements set to 0
float balances[100] {};         // all elements set to 0

第三,列表初始化禁止缩窄转换,这在第3章介绍过:

long plifs[] = {25, 92, 3.0};             // not allowed
char slifs[4] {'h', 'i', 1122011, '\0'};  // not allowed
char tlifs[4] {'h', 'i', 112, '\0'};      // allowed

在上述代码中,第一条语句不能通过编译,因为将浮点数转换为整型是缩窄操作,即使浮点数的小数点后面为零。第二条语句也不能通过编译,因为1122011超出了char变量的取值范围(这里假设char变量的长度为8位)。第三条语句可通过编译,因为虽然112是一个int值,但它在char变量的取值范围内。

C++标准模板库(STL)提供了一种数组替代品——模板类vector,而C++11新增了模板类array。这些替代品比内置复合类型数组更复杂、更灵活,本章将简要地讨论它们,而第16章将更详细地讨论它们。