注:本人所有学习笔记多来自各种书籍原著,C++11学习笔记根据《C++Primer (第五版)》整理,仅供个人复习使用。
1.字面值常量
以0开头的整数代表八进制数,以0x或0X开头的代表十六进制数。整型字面值具体的数据类型由它的值和符号决定。默认情况下,十进制字面值是带符号数,八进制和十六进制字面值既可能是带符号的也可能是不带符合的。类型short没有对应的字面值。
字符串字面值的类型实际上是由常量字符构成的数组。编译器在每一个字符串的结尾处添加一个空字符(‘\0‘),因此,字符串字面值的实际长度要比它的内容多1.如果两个字符串字面值位置紧邻且仅由空格、缩进和换行符分隔,则它们实际上是一个整体。当书写的字符串字面值比较长,写在一行里不太合适时,就可以采取分开书写的方式。
有两类字符程序员不能直接使用:一类是不可打印的字符,如退格或其他控制字符,因为它们没有可视的图符;另一类是在C++语言中有特殊含义的字符。在这些情况下需要用到转义序列:
换行符 \n 横向制表符 \t 报警(响铃)符 \a 纵向制表符 \v 退格符 \b 双引号\" 反斜线\\ 问号\? 单引号\' 回车符\r 进纸符 \f
true和false是bool类型的字面值,nullptr是指针字面值。
2.变量
列表初始化是C++11新标准的一部分,具体长什么样子呢,就下面这个样子:
int a{0};
在现在,无论是初始化对象还是某些时候为对象赋新值,都可以使用这样一组花括号括起来的初始值了。当用于内置类型的变量时,这种初始化有一个重要特点:如果我们使用列表初始化且初始值存在丢失信息的风险,则编译器将报错。
long double ld =3.1415926536;
int a{ld}, b = {ld};//这种初始化会报错,因为存在丢失信息的风险
int c(ld), d = ld;//转换执行,且确实丢失了部分值
默认初始化是指没有指定初值,此时变量被赋予了默认值。定义于任何函数体之外的变量被初始化为0。定义在函数体内部的内置类型变量将不被初始化。一个未被初始化的内置类型变量的值是未定义的,如果试图拷贝或者以其他形式访问此类值将于引发错误。
建议初始化每一个内置类型的变量。虽然并非必须这么做。