最近忙着看书,但发觉记忆不是很好。看时明明白白的东西,一会就忘了。觉得还是记录下来,好记性不如烂笔头,减慢阅读的速度,增加思考的时间。
More Effective C++之一 基础议题
条款1:区分指针和引用
这个可以理解为:指针和引用有什么区别。
一是指针可以为空,而引用不能为空。
引用必须要指代某个对象。由于引用总是要指代一个对象,C++要求引用必须初始化。不存在空引用,则意味着引用比使用指针更高效。因为使用引用之前不需要测试它是否有效,而指针通常需要检查其是否为空。
二是指针可以被重新赋值用以指向另外一个不同的对象,而引用总是指向初始化时它所指代的对象。
条款2:优先考虑C++风格的类型转换
这个可以有两个问题需要明白:一是C风格的类型转换有什么缺点;二是C++风格的类型转换的优点。
首先我们来看C风格类型转换的缺点:
其一是可以通过它们在任意类型之间进行转换。有些转换差别很大,但C风格的类型没有做区分,行为有些粗鲁。
其二是C风格的类型转换很难进行查找。
c++风格的类型转换:有4种类型转换,分别是static_cast, const_cast, dynamic_cast和reinterpret_cast。
使用时应写成
static_cast<typde> (expression),其他同理。
static_cast 针对一种不涉及继承的类型实施转换,也不涉及const转换的时候,就可以使用static_cast转换。
const_cast用来去除掉一个表达式的const属性或volatile属性。强调的是通过这个转换你要做的唯一一件事情就是改变某些东西的const属性或者volatile属性。目前为止,最通常的用法是去除掉一个对象的const属性。
dynamic_cast,用来针对一个继承体系做向下或者横向的安全转换。用dynamic_cast 把指向基类的指针(或引用)转换成指向派生类或者基类的兄弟类的指针(或引用),而且同时可以知道转换是否成功。空指针或者异常意味着失败。
reinterpret_cast最常见的用法是用来在函数指针之间进行类型转换。这种转换常常是由(编译器的)实现所定义的,致使reinterpret_cast几乎不可移植。对函数指针实施类型转换是不可移植的,而且在某些情况下会产生不正确的。
C++风格的类型转换的优点:有确切的含义并容易识别,他们允许编译器诊断类型转换所产生的错误,不会使这些错误就在不知不觉的情况下被漏掉。
该上班了,其他待续。。。
posted on 2009-09-15 10:27
Sandy 阅读(331)
评论(0) 编辑 收藏 引用 所属分类:
c++学习