现在的位置: 首页 > 综合 > 正文

【C++漫谈】const杂谈

2015年07月21日 ⁄ 综合 ⁄ 共 1251字 ⁄ 字号 评论关闭

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++中文版(第三版)

抱歉!评论已关闭.