MoreEffectiveC++读书笔记一

来源:互联网 发布:可视化编程软件 编辑:程序博客网 时间:2024/05/29 07:11
.指针与引用的区别
首先,两者都具有间接引用其他对象的作用。引用在任何情况下都不能指向空值,即一个引用必须总是指向某些对象。两者的使用场景要根据情况而定。
如果你想让使用一个变量并让它指向一个对象,但这个变量在某些时候可能不指向任何对象,那么这时候可以把这个变量声明为指针。这样你就可以赋空值给该变量。相反地,如果变量肯定指向一个对象,并且不允许变量为空,那么此时可以把变量声明为引用。
1.在C++中,引用必须初始化(肯定会指向一个对象)。
2.函数传的参数为引用时,不需要测试它的合法性,而函数传的参数为指针时,应测试下,防止其为空。
3.指针可以被重新赋值以指向另一个不同的对象,,而引用总是指向在初始化时被指定的对象,以后不能改变。
#小结:
1>使用指针的情况:
1.考虑到存在不指向任何对象的可能(在此情况下可以把指针置为空)
2.需要在不同的时刻指向不同的对象(在这种情况下,可以改变指针的指向)
2>使用引用的情况:
1.如果总是指向一个对象并且一旦指向一个对象后就不会改变指向
2.当重载操作符时,应该使用引用
二.尽量使用C++风格的类型转换
C语言风格的类型转换并不能代表所有的类型转换功能。一是它们过于粗鲁,能允许我们在任何类型之间进行转换。二是C风格的类型转换在程序语句中难以识别。在语法上,C语言的类型转换由圆括号和标识符组成。
C++通过引入了四个新的类型转换操作符来克服C风格类型转换的缺点。这四个操作符是static_cast、const_cast、dynamic_cast和reinterpret_cast.过渡写法为:(type)expressiom -> static_cast<type>(expression)
1.static_cast:在功能上基本与C风格的类型转换一样强大,但也有功能上的限制。比如,不能用~将struct转换成int类型,不能把double类型转换成指针类型。此外~不能从表达式中去除const属性,因为const_cast具备这样的功能.
2.const_cast:用于类型转换掉表达式的const或volatileness属性。
3.dynamic_cast:用于安全地沿着类的继承关系向下进行类型转换。即dynamic_cast能把指向基类的指针或引用转换成指向其派生类或其兄弟类的指针或引用,而且可以知道转换是否成功,如果失败的话则返回空指针。这有利于我们检测异常。~也有一定的使用限制,一是它不能被用于缺乏虚函数的类型上,而是不能用它来转换掉constness.
4.reinterpret_casts:最普通的用途是在函数指针类型之间进行转换。其转换的结果几乎都是在执行期定义,因袭使用~的代码很难移植。
三.不要对数组使用多态
四.避免无用的缺省构造函数