#include<iostream>
#include<string>
using namespace std;
int main() {
int i = 0;
int *const p1 = &i;//p1是常量,即指针本身是一个常量,所以是一个顶层const
const int ci = 42;//同上
const int *p2 = &ci;//p2的值可以改变,不变的是p2指针所指向的内容,所以是底层cconst
const int *const p3 = p2;//靠右的是顶层const,靠左的是底层const
const int &r = ci;//用于声明引用的都是底层const
//执行拷贝操作并不会改变被拷贝对象的值
i = ci;
p2 = p3;
//执行对象的拷贝操作时,拷入和拷出的对象必须具有相同的底层const资格,或者两个对象的数据类型必须能够转换。一般来说,非常量可以转换成常量,反之则不行
int *p = p3;//error:p3包含底层const的定义,而p没有
p2 = p3;//两者都是底层const
p2 = &i;//int*可以转换成const int*
int &r = ci;//error:普通的int&不能绑定到int常量上
const int &r2 = i;//const int& 可以绑定到一个普通的int上
}
#include<string>
using namespace std;
int main() {
int i = 0;
int *const p1 = &i;//p1是常量,即指针本身是一个常量,所以是一个顶层const
const int ci = 42;//同上
const int *p2 = &ci;//p2的值可以改变,不变的是p2指针所指向的内容,所以是底层cconst
const int *const p3 = p2;//靠右的是顶层const,靠左的是底层const
const int &r = ci;//用于声明引用的都是底层const
//执行拷贝操作并不会改变被拷贝对象的值
i = ci;
p2 = p3;
//执行对象的拷贝操作时,拷入和拷出的对象必须具有相同的底层const资格,或者两个对象的数据类型必须能够转换。一般来说,非常量可以转换成常量,反之则不行
int *p = p3;//error:p3包含底层const的定义,而p没有
p2 = p3;//两者都是底层const
p2 = &i;//int*可以转换成const int*
int &r = ci;//error:普通的int&不能绑定到int常量上
const int &r2 = i;//const int& 可以绑定到一个普通的int上
}