1.C++11数组初始化方法。初始化数组时,可以省略等号:
double earnings『4』 {1.2e4,1.6e4,1.1e4,1.5e4};
其次,可以在大括号内包含任何东西,这将把所有元素都设置为零。
unsigned int counts 『10』 = {};
float balances『100』 {};
第三,列表初始化禁止缩窄转换,
long plifs 『』= {15,54,7};
char slifs【4】 {"h","i",1122311,"\0"};
char tlifs [4] {"h""i",122"\0"};
在上述代码中,第一条语句不能通过编译,因为将浮点数转换成整数时缩窄操作,及浮点数的小数点后面为零。
第二条语句也不能通过编译,因为1122311超出了char 变量的取值范围。第三条可以通过编译,虽然112是一
个int值但它在char变量的取值范围内。
C++标准模板库提供了一种数组代替品——模板类vector,而C++11新增了模板类array。这些替代品比内置符合
类型数组更复杂,更灵活。
2.字符串
字符串是存储字内存的连续字节中的一系列字符,C++处理字符的方式有两种。第一种来自C语言,常被称为C-风
格字符串。
存储在连续字节中的一系列字符意味着可以将字符串存储在char数组中,其中每个字符都位于自己的数组元素中,
字符串提供了一种存储文本信息的边界方式,如提供给用户的消息或来自用户的相应。C-风格字符串具有一种特
殊性质:以空字符结尾。空字符被写作\0,其ASCII码为0,用来标记字符串的结尾,例如
char dog [8] = {"b","e","a","u","x"," ","I","I",};
char cat [8] = {"f","a","t","e","s","s","a""\0",};
这两个数组都是char数组,但只有第二个数组是字符串。空字符对C-风格字符串而言至关重要。例如,C++有很多
处理字符串的函数,其中包括cout使用的那些函数,他们都逐个的处理字符串中的字符,知道达到空格字符为止。
如果使用cout显示上面的cat这样的字符串。则将显示前七个字符,发现空字符后停止。但是如果使用cout显示上
面的dog数组,cout将打印出数组中的8个字母,并接着将内存中随后的各个字节解释为要答应的字符,知道遇到
空字符为止,由于空字符在内存中很常见,因此,这一过程将很快停止。尽管如此,还是不应将不是字符串的字符
数组当作字符串来处理。
3.在cat数组实例中将数组初始化为字符串的工作看上去冗长乏味--使用大量单引号,且必须集中加上空字符。但是有
一种更好的,将字符数组初始化为字符串的方法--只需要使用一个引号括起的字符串即可,这种字符串被称为字符
串常或字符串字面值,如;
char bird【11】 = "Mr . cheeps ";
char fish 【】 = “Bubbles”;
用引号括起的字符串隐式的包括结尾的空字符,因此不用显式的包括他。
C++输入工具通过键盘输入,将字符串读入到char 数组中时,将自动加上结尾的空字符。
当然,应确保数组足够大,能够存储字符串中所有字符--包括空字符,使用字符串常量初始化字符数组是这样的一种
情况,及让编译器计算元素数目更为安全,让数组比字符串长没有什么害处,只是会浪费一些空间而已。这是因为处理
字符串的函数根据空字符的位置,而不是数组长度来进行处理。C++对字符串长度没有限制。
不过在确定存储字符串所需的最短数组时,别忘了将结尾的空字符计算在内。
注意,字符串常量不能与字符常量呼唤,字符常量是字符串编码的简写表示。在ASCII系统上,S只是83的另一种写法,
因此下面的语句将83赋给shirt_size:
char shirt_size = "S";
但“S”不是字符常量,他表示的是两个字符组成的字符串,实际上S表示的是字符串所在地内存地址。因此下面的语句
将试图将一个内存地址赋给shirt_size:
char shirt_size = "S";
由于地址在C++中山一种独立的类型,因此C++编译器不循序这种不合理的做法。