假设有一个ptr指针, 它保存变量vb2的地址:
Type * ptr = &vb1
当使用指针时,会涉及两个对象:指针本身 及 它所指向的对象。 这意味着 对const 可采用以下 三种保护层次:
1. 确保ptr无法指向其它内存位置
Type * const ptr = &vb1
2. 确保 无法通过ptr 来改变 vb1的值:
const Type * ptr = &vb1
3. 两者都保护:
const Type * const ptr = &vb1
示例代码:
#include <iostream>
using namespace std;
int main() {
int m1 = 12, m2 =13;
const int* n1 = &m1;
int* const n2 = &m2;
cout<<"*n1="<<*n1<<endl;
//*n1 = 10; //error: n1现在所指内容是只读的,通过n1想改变m1的值 是不行的。
n1 = &m2; //ok: n1可以指向另一个位置
// *n1 = 11; //ereor: 通过n1 改变m2的值,仍然不行。
cout<<"*n1="<<*n1<<endl;
//n2 = &m1; //error : n2 里面放的是常量,是m2的地址,只能指向m2
cout<<"*n2="<<*n2<<endl;
*n2 = 100; //ok: n2所指向的位置重新赋值可以,也就是 对m2重新赋值
cout<<"*n2="<<*n2<<endl;
cout<<"m2 = "<<m2<<endl;
return 0;
}
运行结果:
*n1=11 *n1=13
*n2=13
*n2=100 m2 = 100