Effective C++读书笔记(3)

来源:互联网 发布:网络办公管理v3.1系统 编辑:程序博客网 时间:2024/06/08 02:40

条款3: 尽可能使用const

在全局作用域内定义的非const变量默认为extern,而要在别的文件中使用const变量,必须显式的声明为extern。

声明iterator为const(const vector<int>::iterator)等同于T* const,表示迭代器不能够移动,要表示迭代器所指向的值不能变化时用const_iterator。

在一个函数声明式中,const可以和返回值、各参数、函数自身(如果是成员函数)产生关联:1、返回值是const可降低因客户错误而造成的意外而又不至于放弃安全性和高效性。(可以防止(a*b)=c 或者 if(a*b=c)等错误 )2、参数为const可以保证参数不会在函数中被修改(除非要修改参数值,否则都应声明为const)3、const成员变量有两个用途:一、使class接口易于理解,可知哪个函数可以改动对象内容而哪个函数不行;二、可以操作const对象。(const对象不允许操作非const成员函数或成员变量,只能操作const函数或变量

两个函数可以因常量性被重载。

const成员函数的意义有两种概念:1.bitwise_constness:成员函数只有在不更改对象的任何成员变量时才能说是const。(这种概念下并不能保证真正的const)2.logical_constness:const成员函数可以修改对象内的某些bits,但只有在客户端侦测不出的情况下。(必须用mutable实现)

c++提供关键字mutable,其修饰的non_static成员变量不具有bitwise_constness约束。

常将边界检验、日志数据访问以及检验数据完整性等易于造成代码重复的辅助操作放在一个private函数中。

编译器强制实施bitwise_constness,但是编写程序应保证logical_constness。

当const和non-const成员函数有着实质等价的实现,只是在返回值处多加了const时,为了避免代码重复,应令non-const调用const版本(应用const-cast、static-cast)。

const-cast将常量指针和引用转换成非常量指针和引用

static-cast<type_id>(expression)将expression转化成type_id类型(非安全转换)

0 0
原创粉丝点击