愚公移山

死而后已

C++博客 首页 新随笔 联系 聚合 管理
  1 Posts :: 11 Stories :: 0 Comments :: 0 Trackbacks

Effective C++读书笔记

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

1 让自己习惯C++()

条款03:尽可能使用const

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

 

const的用处修饰globalnamespace作用域中的常量;或修饰文件、函数、或区块作用域中被声明为static的对象;也可以修饰classes内的staticnon-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成员的值。

 

constnon-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、当constnon-const成员函数有着实质等价的实现时,令non-const版本调用const版本可避免代码重复。

posted on 2007-11-27 00:50 Nathan.Yu 阅读(157) 评论(0)  编辑 收藏 引用 所属分类: Effective C++(3E)读书笔记

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理