const修饰的成员变量
#include <iostream> using namespace std; int main() { int x=1; const int y=x; //const data x=3; //accept //y=3; read-only variable 'y' cout<<"x=:"<<x<<" "<<"y=:"<<y<<endl; //x=3,y=1 int k=0; int *p1=&x; //non-const data,non-const pointer const int *p2=&x; //const data,non-const pointer int const *p2_1=&x; //const data,non-const pointer *p1=6; //accept //*p2=3; read-only location '*p2' //*p2_1=3; read-only location '*p2_1' //p2=&k; //accept //p2_1=&k; //accept cout<<"*p1=:"<<*p1<<" "<<"*p2=:"<<*p2<<" "<<"x=:"<<x<<endl; //*p1==6,*p2==6,x==6 //Important //Because p1 points to the address of x,the value *p1 will change to p2 and x int z=0; int *const p3=&x; //non-const data,const pointer //p3=&z; read-only variable 'p3',The values of p3 is address *p3=z; //accept cout<<"*p3=:"<<*p3<<endl; int const *const p4=&x; //const data,const pointer const int *const p5=&x; //const data,const pointer cout<<"*p4=:"<<*p4<<" *p5=:"<<*p5<<endl; return 0; }
const修饰指针时:
- 只有一个const,如果const位于*左侧,表示指针所指数据是常量,叫做:指向常量的指针变量,不能通过解引用修改该数据;指针本身是变量,可以指向其他的内存单元。
- 只有一个const,如果const位于*右侧,表示指针本身是常量,叫做:指向变量的指针常量,不能指向其他内存地址;指针所指的数据可以通过解引用修改。
- 两个const,*左右各一个,叫做:指向常量的指针常量,表示指针和指针所指数据都不能修改。
const修饰函数参数
- 此参数在函数体内不可改变
const修饰的成员函数
- const修饰的成员函数不能改变任何成员变量的值(mutable修饰的成员变量除外)
- const修饰的成员函数不能调用任何非const成员函数(因为非const成员函数可能改变成员变量的值,而const成员函数能不改变成员变量的值,两者冲突)
const修饰的变量:
- 具有常量属性,不能被修改,但是仍然不能放在数组中
const修饰的引用:
- 为常引用,不能通过引用修改该值
const修饰的对象:
- 为常对象,所有对象的成员变量不可改,不可调用非const函数