(1)变量的定义:
变量的初始化和赋值区别:初始化不是赋值,是变量在创建的时候给的一个初始值,而赋值的含义是把当前变量的值擦除,用一个新值来代替。
(2)指针和引用的区别:
- 引用在定义的时候就必须绑定对象而且始终绑定该对象且引用没有 const(指的是所引对象的值可以改变,所绑定对象本身不可变,常量引用可以绑定字面值,不具有顶层const的指针可以改变指针所指对象,同时指针定义的时候可以定义为空nullptr。
- 指针是对象,引用不是对象只是对象的引用。
- Sizeof(指针)得到指针本身的大小,sizeof(引用)得到所引对象的大小。
(3)顶层const和底层const(指针的角度):
顶层const:指的是指针本身不会变。
底层cosnt:指的是指针所指对象不会变。
(4)constexpr
使用constexpr可以验证一个表达式是否为常量表达式,如果你认定一个表达式为常量表达式,那就把它声明成constexpr类型(为了他人和自己着想)。
(5)auto和decltype
auto会忽略顶层const,保留底层const。
decltype(())必然是引用类型,decltyp(*p)得到的是(假设是int)int &
(6)头文件
预处理器可以避免多文件分离式编译下对象的重复定义问题。
头文件中不应该包含using语句,容易引发名字冲突。
(7)几个特殊类型
1.auto len=line.size() //len的类型是string::size_type
该类型是string类下定义的一个无符号类型,能够存放任何string对象的大小,size()函数的返回值是size_type类型。(注意避免混用int和unsigned)
- difference_type 在string和vector中都有定义,在迭代器中他是指左侧迭代器移动到右侧迭代器的距离的类型,可正可负,有符号。
- size_t 是一个与机器相关的unsigned类型,定义在cstddef头文件中。
在用下标访问元素时,数组的下标类型就是size_t,vector实际上也是使用此类型,源码中有typedef size_t size_type
- ptrdiff_t是两个指针相减的结果的类型,定义在cstddef头文件中。带符号。
(8)阅读一个复杂的定义
不带数组的从右往左读,带数组的从中间往两边读。
(9)强制类型转换的几种类型
- static_cast 只要不包含底层const都可以使用。
- const_cast 去掉const属性,只能去掉底层const。不能改变对象的类型,如果对象本身是个常量使用const_cast将产生未定义行为。
(10)switch语句
switch语句中的case标签必须是整型常量,每个case(包含default)都应当有break语句作为结束,否则匹配对应的case结束后将接着执行不含有break的case语句。