盐城网站建设代理商/浙江搜索引擎优化
如果关键字const出现在星号左边,表示被指物是常量;如果出现在星号右边,表示指针自身是常量.
有些程序员会将关键字const写在类型之前,有些人写在类型之后。这两种写法的意义相同,比如:
假如有以下的类:
这个类将operator[]声明为const成员函数,而该函数却返回一个引用指向对象内部值.
这种情况导致了所谓的logical constness.一个const成员函数可以修改它所处理的对象内的某些bits.
这两种数组被修改对const text对象虽然可以接受,但是编译器不允许,它们坚持bitwise constness。怎么办?
解决办法很简单:
使用mutable释放掉非静态成员变量的bitwise constness约束
现在就不报错了.
在const和non-const成员函数中避免重复
在上面中,const operator[]完全做掉了non-const版本该做的一切,唯一的不同是其返回类型多了一个const资格修饰.
但是其中发生的代码重复以及编译时间、维护、代码膨胀等等都是令人头疼的问题.
怎么样才能解决上面这些问题呢?
通过转型可以解决问题,这里进行了两次转型:
1.为*this添加const,接下来调用operator[]得以调用const版本
2.从const operator[]的返回值中移除const.
当然这个语法有点难看,但是它实现了避免代码重复的效果.
注意:反向做法–让const版本调用non-const版本是不应该的。
因为对象有可能因此被改动,如果在const函数内调用non-const函数,就是冒了这样的风险.