5.实现

条款26:尽可能延后变量出现的时间

可能存在定义好的变量最后没有被用上的情况。所以要尽可能的延后变量定义的时间。

条款27:尽量少做转型动作

c++相比于c,提供了4个新的转型动作

  • const_cast:用来剔除对象的常量性

  • dynamic_cast:用来执行父类到子类的转型

  • reinterpret_cast:执行低级转型

  • static_cast:除了上面的几种特殊转型,一般都是用这个转型

如果需要转型,尽量使用新式转型,而不是旧式转型。新式转型容易被被辨识出来。

如果可以,尽量避免转型,特别是在注重效率的代码中使用dynamic_cast,这是很慢的。

条款28:避免返回handles指向对象内部成分

这个和避免返回local stack变量的引用是一个道理。对象也容易被销毁,之后产生悬空handle

条款29:为异常安全而努力是值得的

异常安全函数分为3种:基本型,强烈型,不抛异常型

对于强烈型,要不就是完成调用,要不就返回到开始的状态,这个可以用copy and swap实现

条款30:了解inlining的里里外外

inline函数效率很高,之前在defing模块也提到了。但是inline只适用于小型函数,对于大型函数而言使用inline是一种灾难。

首先,如果你想得到一个inline函数的函数指针,编译器还是会为这个函数生成一个函数本体。甚至你没有想去得到函数指针,编译器回去得到构造函数和析构函数的函数指针。如果将构造函数和析构函数inline,这是个不好的行为,会有大量的重复代码。

inline函数还不好调试,在调试期只能关闭inline

条款31:将文件间的编译依赖关系降到最低

这个条款大概就是告诉大家如何放置声明与定义

支持“编译依存性”最小化的一般构想是:相依与声明式,不要相依与定义式。如果只依赖于声明式,在改变结构的时候。重新编译只需要修改定义代码。如果依赖于定义式,还需要修改调用代码

程序头文件应该完全只有声明式

Last updated

Was this helpful?