Effective c++ 学习笔记(一)

来源:互联网 发布:小闹钟软件 编辑:程序博客网 时间:2024/06/03 22:45

Chapter 4:Designs and Declarations

1.Item 20:Prefer pass-by-reference-to-const to pass-by-value

对于用户自定义类型,pass-by-reference-to-const(orz,不知道怎样翻译更合适,表示还是英文表示更顺心)比传值更高效,因为这样可以避免多次调用构造和析构函数(尤其是继承情况下,还得调用父类的)带来的开销,也能避免切割问题(传子类对象给父类形参)。

但是对于内置类型(比如int),传值会比引用更高效,当你有机会在两者之间选择的时候,传值未必是不合理的,这也同样适用于STL(Standard    Template Libarity)中的iterator和function object(或functor,STL六大组件之一,其它几个为Containers/allocators/adaptors/algorithms/iterators,msdn    对functor的解释:http://msdn.microsoft.com/en-us/library/aa985932(v=vs.80).aspx,functor是一种介于对象和函数之间的一个东西,调用方式和函数  一样,但是调用的却是对象里的operator()操作符,functor和六大组件可参考 和http://blog.csdn.net/linuxtiger/article/details/6955633和//blog.csdn.net/linuxtiger/article/details/6955633)。

不要混淆小型的用户自定义类型和内置类型,小不代表传值代价一定小,然后可以用传值代替引用!谨记,除了内置类型和STL的iterator及functor之外,其他类型都尽量用pass-by-reference-to-const代替pass-by-value(具体的iterator和functor实例有待增加)

2.Item 18:Make interfaces easy to be use correctly and hard to use incorrectly

阻止错误的方式包括:创建新类型(新类型会有针对需求的限制,因而不符合新类型要求的参数不会通过编译滴),限制类型操作(尽量使自定义类型的行为和内置类型的相兼容),束缚对象值,限制client的资源管理责任。

3.Item 21:Don't try to return a reference when you must return an object

返回一个引用或者指针指向一个local对象是很恐怖的(它可能已经被销毁了,orz),有木有

4.Item 22:Declare data members private

将成员变量隐藏在函数接口的背后使得可以在多线程环境中执行同步控制(表示这个具体实例还木有找到啊,orz),有助于封装啊有木有,不要以为protected就比public更有封装性,它会影响其derived class哦。

5.Item 23: Prefer non-member non-friend functions to member functions

使用non-member non-friend functions更有助于封装,而且一个函数对某个类来说是non-member的,但是对另一个类来说可能是member哦。non-member函数可以和类处于同一个命名空间内,而对于Java或者C#这种所有函数必须定义在类内的语言来说是不行滴

6.Item 27: Minimize casting

鉴于C++的多重继承,使用转型的时候容易导致单一对象拥有一个以上的地址。转型会产生额外代码。。



1.