1. 初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来代替。
2.使用列表初始化内置类型的变量时,如果初始值存在丢失信息的风险,则编译器将报错。
int i{0.1}; // 错误
3.如果想声明一个变量而非定义它,就在变量名前添加关键字extern,而且不要显示的初始化它,任何包含了显示初始化的声明即成为定义。
extern int i; // 声明i而非定义i int j; // 声明并定义j extern double pi = 3.14; //定义,如果在函数体内试图初始化一个extern变量将报错
4.引用并非对象,相反的,它只是为一个已经存在的对象起的另外一个名字。
5.一旦引用的初始化完成,引用将和它的对象一直绑定在一起,所以引用在定义时必须初始化。
6.在支持C++ 11的情况下空指针最好使用nullptr,而尽量避免使用NULL。至于原因可以看如下链接:
http://www.cnblogs.com/zoneofmine/p/7224947.html
7.void* 是一种特殊的指针类型,可用于存放任意对象的地址,但是我们不知道这个地址中到底是个什么类型的对象,所以也无法对这个对象做操作。
8.在定义多个变量的时候,类型修饰符(*或&)仅仅修饰最近的那个变量。
int* p1, p2; // p1是int指针,p2是int
9.引用本身不是一个对象,所以不能定义指向引用的指针,也没有引用的引用。
10.decltype的表达式如果是加上了括号的变量,结果将是引用。
int i = 0; decltype((i)) a; // 错误,a是int&,没有初始化 decltype(i) b; // 正确,b是一个int