📚
cpp
  • README.md
  • Effective c++
    • 1.让自己习惯c++
    • 2.构造/析构/赋值运算
    • 3.资源管理
    • 4.设计与声明
    • 5.实现
    • 6.继承与面向对象设计
    • 7.模板与泛型编程
    • 8.定制new和delete
  • More effective c++
    • 1.基础议题
    • 2.操作符
    • 3.异常
    • 4.效率
    • 5.技术
    • 6.杂项讨论
  • effective modern c++
    • 1.型别推导
    • 2.auto
    • 3.转向现代c++
    • 4.智能指针
    • 5.右值引用,移动语义和完美转发
    • 6.lambda表达式
    • 7.并发API
    • 8.微调
  • stl源码剖析
  • cpp-concurrency-in-action
Powered by GitBook
On this page
  • 条款26:尽可能延后变量出现的时间
  • 条款27:尽量少做转型动作
  • 条款28:避免返回handles指向对象内部成分
  • 条款29:为异常安全而努力是值得的
  • 条款30:了解inlining的里里外外
  • 条款31:将文件间的编译依赖关系降到最低

Was this helpful?

  1. Effective c++

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:将文件间的编译依赖关系降到最低

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

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

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

Previous4.设计与声明Next6.继承与面向对象设计

Last updated 5 years ago

Was this helpful?