c++ primer第三版看了两遍,没接触过 c++ 11 得特性,现在来看第五版,记下一些东西,模糊了的,忘记了的,才了解的
1.long long 新定义数据类型,64位,有符号类型 c++11
2.仔细看字面值常量。
3.一个引用只能绑定一个对象,不能令引用重新绑定到另外一个对象,引用必须初始化。
4.nullptr 是一种特殊类型的字面值,它可以被转化成任意其他的指针类型,初始化时最好用nullptr,尽量避免使用NULL c++11
5.void 指针:可以用来存放任意对象的地址,因为任意对象,那么就不能操作void 指针所指的对象(后面有补充)
6.默认情况下,const对象被设定为尽在文件内有效,如果多个文件中出现了同名的const变量时,其实等同于在不同文件中分别定义了独立的变量。
7.阅读复杂表达式的时候,要从右向左读:例子: const int* ptr , int* const ptr2, int*& ref
8.顶层const:表示指针本身是一个常量(对象本身是常量),底层const:表示所指对象是一个常量。
9.常量表达式:值不会改变,并在编译过程中就能得到计算结果的表达式。
10.constexpr :如果变量声明为constexpr 类型,那么编译器就会来验证变量的值是否是一个常量表达式。如果认定变量是一个常量表达式,那么就把它声明成constexpr 。
如果是constexpr 指针,初始值必须是nullptr ,0 或者指向固定地址的对象。 c++11
11.别名声明 : 除了typedef 还可以用 using 别名 = 现有的类型名 来规定别名。 c++11
12.auto 类型说明符: 让编译器替我们分析表达式所属的类型。 auto 会忽略掉顶层const的特性,如果希望auto推断出来的类型是一个顶层const,那么就要加上const
比如: const auto name = str;c++11
13.decltype 类型指示符: decltype(表达式):用来让编译器选择并返回表达式的数据类型,如果表达式是函数,那么就返回那个函数返回值的类型,但是并不会调用
那个函数,如果是表达式,那么就返回表达式计算完毕后的类型。
decltype((expr))和decltype()的区别:前者的结果永远是引用,后者只有当expr是引用的时候,才是引用。 c++11
14.类内初始值:创建对象时,类内初始值将用于初始化数据成员。 c++11
15.避免unsigned 和 signed 的混用。
16.for循环: range for :形式: for(declaration :expression){ statement;},其中,declaration 定义一个临时变量,expression 是一个对象,declaration
是expression里面的元素。是比以前的for要方便一点,有点像python 里面的 for declaration in expression : do something with declaration ,
但是在range for 块里面不能改变容器,序列的大小。 c++11
17.vector<vector<int> > 和 vector<vector<int>> 不用再在>>中间加空格了,但是也要看编译器把不把>>当作 operator>> c++11
18.列表初始化vector vector<T> con = {ele1,ele2,ele3...} 或者 vector<T> con{ele1,ele2,ele3...} 比之前的构造好用一些 特别是用内置数组来初始化vector的时候,
先要声明一个数组,然后传数组首指针和长度给ctor才能构造一个vector。 c++11