符合类型:引用和指针
一、引用,为对象起了另外一个名字,与对象绑定在一起,而不是赋值。int &refVal=ival;定义了一个引用之后,对其进行的所有操作都是在与之绑定的对象上进行的。
1.引用必须初始化。
2.不能定义引用的引用。
3.引用不能与字面值或者某个表达时的计算结果绑定在一起。例外,在定义常量引用的时候,允许用任意表达式作为初始值。
二、指针与引用的区别,指针本身就是一个对象,允许对指针的赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象。指针无需在定义时赋值。
1.int *p=&ival &取地址符,*解引用符。
2.指针值:指向一个对象,指向紧邻对象所占空间的下一个位置,空指针,无效指针。
3.对指针解引用会得到所指的对象。
4.建议初始化所有指针,nullptr
5.一般情况下,定义指针的类型要和它指向的对象的类型一致。void*是一种特殊的指针,可以存放任意对象的地址。
6.要使指针指向有效的对象,是程序员所做的事情,如果让它指向一个对象,那么指针有效,如果指针所指向的对象失效,那么指针为Null;使用指针之前
应该判断它是否为Null.
7.基本数据类型+声明符,类型修饰符是声明的一部分。
三、const限定符
1.对常量的引用(常量引用),const int &r=i;常量引用仅对引用可参与操作做出了限定,对于引用对象本身是不是一个常量未作出限定。
2.指向常量的指针 const int *p=π所谓指向常量的指针,仅仅要求不能通过指针改变对象的值。
3.常量指针,int *const pi=&errnumb;要求指针的值不能变化。常量指针必须初始化。
4.指针的类型必须与其所指向的对象的类型一致,例外一:允许一个指向常量的指针指向一个非常量对象。
5.理解一个复杂声明的原则,右向左 。首先找离变量最近的符号,对象的类型由声明符的其他部分确定,再观察基本数据类型。
6.顶层const表示指针本身是个常量,底层const表示指针所指的对象是一个常量。
7.constexpr常量表达式是指值不会改变并且在编译过程中就能得到计算结果的表达式。字面值属于常量表达式。
四、1.Type alias类型别名。typedef double wages;等价,但是不能还原解读。
2.auto自动分析表达式所属的类型,当不清楚类型时。多变量,数据类型保持一致。auto一般会忽略掉顶层const。
3.decltype从表达式类型推断所定义变量的类型,decltype((variable))的结果永远是引用。