【Effective C++】实现

条款26:尽可能延后变量定义式出现时间

  • 延后变量定义的时间可提高效率

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

  • Derived对象可能拥有不同的地址(当Base* 、Derived*指向该对象时)
  • 尽可能使用新转型,因为其容易辨别且对转型类型进行了分类

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

  • 提高封装性,减小用户直接修改对象内部成员的可能性
 1 class Point{};
 2 struct RectData
 3 {
 4     Point ulhc;
 5     Point lrhc;
 6 };
 7 class Rectangle{
 8 public:
 9     Point &upperleft() const { return pData->ulhc; };//返回了handler,用户可更改内部成员,尽管有const
10     const Point &upperleft() const { return pData->ulhc; };//增加了限定
11 private:
12     std::shared_ptr<RectData> pData;
13 };

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

  • 见原书

条款30:inline函数

  • inline可以被隐喻声明也可以被显示声明(inline关键字)
  • 将函数定义在class定义式内是inline的隐喻方式
  • inline函数通常一定被置于头文件内,因为大多数建置环境在编译过程中进行inlining,而为了将一个“函数调用”替换为“被调用函数的本体”,编译器必须知道那个函数长什么样子。
1 class Rectangle{
2 public:
3     Point& upperleft() const { return pData->ulhc; };//inline的方式
4 
5 private:
6     std::shared_ptr<RectData> pData;
7 };
8 Point& Rectangle::upperleft() const { return pData->ulhc; };//非inline

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

  • 见原书
posted @ 2022-04-02 21:21  axingzheng  阅读(28)  评论(0)    收藏  举报