const指定一个语义约束,它允许你告诉编译器和其他程序员某值应该保持不变,这样可以获得编译器的帮助,确保该约束不被违反。然而由于关键字const使用看上去比较灵活,接下来就一些常见的使用总结如下,以便方便自己和他人。
1、指针和const
对于指针,const可以来约束指针自身,也可以约束指针所指物,或约束两者。
(1)指向const对象的指针
const关键字出现在星号左边,表示被指对象时常量,则不允许用指针来改变其所指的const值。
const double pi = 3.14; const double *cptr = π
const限定了cptr指针指向的对象的类型,而cptr本身并不是const。
应用:在实际的程序中,指向const的指针常用作函数的形参。将形参定义为指向const的指针,以此确保传递给函数的实际对象在函数中不因为形参而被修改。
(2)const指针
const关键字出现在星号右边,表示指针自身是常量,则该指针的值不能被修改,任何企图给const指针赋值的行为都会导致编译时出错。
int errNumb = 0; int *const curErr = &errNumb;
指针所指对象的值能否修改完全取决于该对象的类型。如,curErr指向一个普通的非常量int型对象errNumb,则可使用curErr修改该对象的值。
(3)指向const对象的const指针
const double pi = 3.14159; const double *const pi_ptr = π
pi_ptr是一个const指针,指向double类型的const对象。
在该例中,既不能修改pi_ptr所指向对象的值,也不允许修改该指针的指向。
2、const成员函数
const成员函数,关键字const放在函数声明的尾部。
任何不会修改数据成员的函数都应该声明为const类型。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性。
使用const成员函数有两个理由,第一,它使得知哪个函数可以改动对象内容而哪个函数不行;第二,它可用来处理取得的const对象。
关于Const函数的几点规则:
a. const对象只能访问const成员函数,而非const对象可以访问任意的成员函数,包括const成员函数.
b. const对象的成员是不可修改的,然而const对象通过指针维护的对象却是可以修改的.
c. const成员函数不可以修改对象的数据,不管对象是否具有const性质.它在编译时,以是否修改成员数据为依据,进行检查.
d.
然而加上mutable修饰符的数据成员,对于任何情况下通过任何手段都可修改,自然此时的const成员函数是可以修改它的
转载请标明出处,原文地址:http://blog.csdn.net/jasonding1354/article/details/37933187
参考资料:
C++ Primer中文版(第4版)
Effective C++中文版(第三版)