您的位置:首页 > 编程语言 > C语言/C++

【读书笔记】Effective C++-1 让自己习惯C++(之二)

2007-11-12 00:40 435 查看

Effective C++读书笔记

--By Nathan.Yu 2007-11-11--

1 让自己习惯C++(二)

条款03:尽可能使用const

const允许你指定一个语义约束(也就是指定一个“不该被改动”的对象),而编译器会强制实施这项约束。

const的用处:修饰global或namespace作用域中的常量;或修饰文件、函数、或区块作用域中被声明为static的对象;也可以修饰classes内的static和non-static成员变量;修饰指针(迭代器)及它们所指定对象等。而最具威力的用法是在函数声明中,在一个函数声明内,const可以和函数返回值、参数、函数自身(成员函数)产生关联。

const与指针:如果关键字const出现在星号左边(类型之前或之后一样),表示被指物是常量;如果出现在星号右边,表示指针本身是常量;如果出现在星号两边,表示被指物和指针都是常量。

const与迭代器:声明迭代器为const(即const
..::iterator xóT* const x)表示这个迭代器不能指向不同的东西,但它指向的东西是可以改动的。如果希望迭代器所指定东西不可被改动,可使用const_iterator;

【要点摘录】一个“良好的用户自定义类型”的特征是它们避免无端的与内置类型不兼容。

const成员函数:将const实施与成员函数的目的,是为了确认该成员函数可作用于const对象(当然也可作用于非const对象),而非const成员函数则只能作用与非const对象。
const成员函数使“操作const对象”成为可能,这对编写高效代码是个关键。因为改善C++程序效率的一个根本方法是以pass-by-referenct-to-const方式传递对象,而此技术可行的前提是我们有const成员函数可用来处理取得(并经修饰而成)的const对象。
<在普通的非const成员函数中,this指针的类型是T*
const this的,可以改变所指物,但不能改变指针本身;在const成员函数中,this指针的类型是const
T* const this的,二者都不能改变>

【要点摘录】两个成员函数如果只是常量性不同,可以被重载。这实在是一个重要的C++特性。

【要点摘录】如果函数的返回类型是个内置类型,那么改动函数返回值从来就是不合法的。如:int f(); f()=1;是不合法的!

关于const成员函数的两个学派:bitwise
constness(又称physical constness)和logical
constness

mutable(可变的)关键字:释放掉non-static成员变量的bitwise
constness约束,使在成员函数中可修改const成员的值。

在const和non-const成员函数中避免重复:
允许non-const调用const,而不允许const调用non-const。因为const成员函数调用non-const成员函数时,对象有可能被改动。const调用non-const时,必须用const_cast将*this上的const性质去掉才能调用,这是不安全的做法。

请记住:
1、将某些东西声明为const可帮助编译器侦测出错误用法。const可被施加于任何作用域内的对象、函数参数、函数返回类型、成员函数本体。
2、编译器强制实施bitwise
constness,但你编写程序时应该使用“概念上的常量性”(conceptual constness)。
3、当const和non-const成员函数有着实质等价的实现时,令non-const版本调用const版本可避免代码重复。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: