转载请注明出处,谢谢
http://blog.csdn.net/sprintfwater/article/details/8757379
最近弄了一下const,感觉各种复杂声明代表的意思,让人有点迷糊,在里做总结,以防以后又迷糊:
为了便于讲解:首先定义两个变量:
typedef int *pint
const int cb = 5;
int b = 5;
const int a = cb
int const a = cb;
所带表意思相同:a为5的常量,不能对a赋值(如:a = 3是错误做法)
const int a = b
int const a = b;
所带表意思相同:a为5的常量,不能对a赋值(如:a = 3是错误做法)
const int *pa = &cb
int const *pa = &cb;
所带表意思相同;pa为指向常量cb的指针,pa所指对象的值不可改变(如:*pa = 3是错误做法),而a可变改变所指对象(如:pa = &b)
const int *pa = &b
int const *pa = &b;
所带表意思相同;pa为指向常量b(这里只是pa自认为所指b是常量)的指针,pa所指对象的值可改变但不能通过pa来改变(如:*pa = 3是错误做法),而a可变改变所指对象(如:pa = &b)
const int* const pa = &cb
const pint const pa = &cb
const const print pa = &cb(编译错误:const不能重复)
所带表的意思相同;pa为常量指针,不能将其指向与其它对象(如:pa = &c是错误做法),不能改变pa所指对象的值(如: *pa = 1是错误做法);
int* const pa = &b
pint const pa = &b
const print pa = &b所带表的意思相同;pa为常量指针,不能将其指向与其它对象(如:pa = &c是错误做法),能改变pa所指对象的值(如: *pa = 1是可行做法);
总之一句话,const表述的是离他最近的那个对象(可能是指针)为常量,不可改变他的值,就行了。
const函数是常成员函数,他只能由常对象调用,他是常对象唯一的对外接口,所以是常对象的就调用const函数,其他的调用非const函数