(2)尽可能使用const

     关键字 const 的一件奇妙事情是,它允许你指定一个语义约束,而编译器是强制实施这项约束。

关键字const多才多艺。

1. 关键字const出现在星号左边,表示被指物是常量;如果出现在星号右边,表示指针自身是常量;如果出现在星号两边,表示被指物和指针本身两者都是常量

注意:一下两种类型是一样的

void f1 (const Widget * pw);

void f2 (Widget const *pw); //都是指被指物是常量,没有区别

就迭代器而言,有iterator 和const_iterator ,对于

const std::vectoriterator iter=vec.begin( ); //iter 的作用像个 T* const

意味着可以改变iter指向的物,但是不能改变 iter指针自身。

那么对于

std::vector::const_iterator cIter=vec.begin( ); //cIter的作用相当于 const T*

意味着可以改变cIter指针自身,但是不能改变cIter指向的物。

2. 令函数返回一个常量值,往往可以降低因客户错误而造成的意外,而又不至于放弃安全性和高效性。

3. 将const 实施于成员函数的目的,是为了确认该成员函数可作用于 const 对象身上。这一类成员函数之所以重要有两个原因:(1)它们使class接口比较容易被理解。这是因为,得知哪个函数可以改动对象内容而哪个函数不行,很重要;(2)它们使“操作const对象”成为可能,这对编写高效代码是个关键。

许多人漠视一件实事:两个成员函数如果只是常量性不同,可以被重载。

Class TextBlock

{

public:

const char& operator [ ](std::size_t position ) const //operator [] for const对象

{return text [position];}

char&operator [ ](std::size_t position ) //operator [] for non-const对象

{return text [position];}

private:

};

如果函数的返回类型是个内置类型,那么改动函数的返回值从来就不合法。

4. 利用C++的一个与const相关的摆动场:mutable(可变的)mutable释放掉non-static成员变量的 bitwise constness 约束。

5. “运用const成员函数实现出其 non-const孪生兄弟”的技术是值得了解的。但是,反过来,并不是该做的事。令non-const版本调用const版本可以避免代码重复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值