1.指针常量与常量指针
规则:* (指针)和 const(常量) 谁在前先读谁 ;*象征着地址,const象征着内容;谁在前面谁就不允许改变。
int const *p; -- 常量指针,同下
const int *p; -- 常量指针,指针指向的内容不能修改
int *const p; -- 指针常量,指针本身的内容不能修改,即指向不能修改
2.顶层const与底层const
概念:指针本身是不是常量 和 指针所指的是不是一个常量 是两个相互独立的问题
顶层const:指针本身是个常量
底层const:指针所指的对象是个常量
当执行对象的拷贝操作时,拷入和拷出的对象必须具有相同的底层const资格,或者两个对象的数据类型必须能够转换。一般来说,非常量可以转换为常量,反之则不行。
3.constexpr与常量表达式
const int *p = nullptr; // p是一个指向整型常量的指针
constexpr int *q = nullptr; // q是一个指向整型的常量指针
3.引用的定义
1)允许一条语句能定义多个引用,引用标识符前必须以&开头;
int &r1 = a;
2)引用不是对象不能定义引用的引用;
int a = 10;
int &r1 = a;
int &r2 = &r2; // 错误
3)引用必须被初始化,且必须是一个对象;
int &r1;错误
int &r2 = 10; // 错误
4)引用类型必须与内引用对象类型一致
double d = 3.14;
int &r = d; // 错误
5)指向指针的引用
int i = 42;
int *p = &;
int *&r =p; // 离变量名最近的符号对变量的类型有最直接的影响,因此r是一个引用。
6)对常量的引用
const int ci = 1024;
const int &r1 = ci;
int i = 42;
const int &r2 = i; // 正确,允许将const int& 绑定到一个普通int对象上
int &r3 = r2; // 错误,r3是一个普通的非常量引用
double d = 3.14;
const int &r4 = d; // 错误,r4引用类型和被引用变量类型不一致
const int &r4 = d; // 正确,r4会引用到一个临时变量上,由编译器完成
即:const int temp = d; const int &r4 = temp;
阅读(827) | 评论(0) | 转发(0) |