reading《effective c++》三

第五章 实现(implementations)

Item26:尽可能延后变量定义式的出现时间

这样可以改善程序的清晰度并改善程序效率;
对于循环中的变量:考虑放在内外的不同情况下的成本对比;
一般情况下,除非当前代码对于处理效率非常敏感,不然应该将变量定义在循环内,避免维护问题。

Item27:尽量减少转型动作(casting)

c语言中的类型转换语法:(type)expression;OR type(expression);
c++中新增的类型转换语法:
    1.const_cast<T>(expression);移除对象的常量性const转为non-const;
    2.dynamic_cast<T>(expression);安全向下转型???
    3.reinterpret_cast<T>(expression);很少用,执行低级转型;
    4.static_cast<T>(expression);强迫隐式转换:non-const转为const,int转为double等,void*指针转为typyed指针,pointer-to-base转为pointer-to-derived等。
    总结:尽量少使用转型操作,以及尽量避免dynamic_cast操作,使用转型时,尽量使用新式转型操作符。

Item28:避免返回handles指向对象内部成分

避免返回handles(引用、指针、迭代器)指向对象内部,否则会破坏对象的封装性。

Item29:为“异常安全”而努力是值得的

??????????????(没有看懂)

Item30:透彻了解inlining的里里外外

对于体积小的函数而言

Item31:将文件间的编译依存关系降至最低

第六章 继承与面向对象程序设计

Item32:确定你的public继承塑模出is-a关系

Item33:避免遮掩继承而来的名称

1.继承类内的名称会遮掩base classes内的名称;
2.为了让基类中被遮掩的函数在派生类中可见,可用using::base 或者转交函数(forwarding function)(为那些不支持using声明式的老旧编译器的方法)

Item34:区分接口继承与实现继承

1.

Item35:考虑virtual函数以外的其他选择

Item36:绝不重新定义继承而来的non-virtual函数

Item37:绝不重新定义继承 而来的缺省参数值

缺省参数值都是静态绑定;而virtual函数是动态绑定(唯一可以覆写的东西)

Item38:通过符合塑模出has-a或者根据某物实现出:

复合(composition)是类型之间的一种关系,当某种类型的 对象内含它种类型的对象,便是这种关系。
set的实现:每个元素招致三个指针的开销,以平衡查找树实现查找,在查找。删除、插入有对数的效率,当时间比空间重要时,这样的 设计合情合理;但是,当空间比时间重要时,需要写自己的template。
复用(reuse)有诸多好处。
is-implemented-in-terms-of

Item39:明智而审慎地使用private继承

public继承:is-a的关系,基类的属性派生类全有。
private继承:意味着is-implemented-in-terms-of;与上一条款中的composition中的意义相同,一般情况下,尽量使用复合,必要时使用private继承。
private继承的基类中的所有成员在派生类中全部为private状态。
但是当派生类需要访问基类的protected成员,或者需要重新定义继承而来的virtual函数时,这么做是合理的。
与composition不同,private 继承可以造成empty base最优化。这对于致力于“对象尺寸最小化”的程序开发库而言,可能比较重要。

Item40:明智而审慎地使用多重继承

多重继承可能导致 派生类从基类中继承相名称的函数,那样会导歧义。
多重继承的正当用途:public继承某个接口类,private继承某个协助实现的class相结合。

猜你喜欢

转载自blog.csdn.net/mixiaoxinmiss/article/details/78805016