[C.C++] c++

953 0
Honkers 2025-8-19 01:07:31 来自手机 | 显示全部楼层 |阅读模式

reading 《Effective C++》

侯杰(译)

注释:斜体表示不理解的内容

第一章:让自己习惯c++

Item1:视c++为语言联邦(federation of languages)

  1. c++的组成:
  2. 1. C语言:基础语法与内置类型;
  3. 2. objective-oriented c++:类及相关属性;
  4. 3. template c++:泛型编程;
  5. 4. STL:标准模板库中的containers、iterators、algorithms及function objects等。
  6. 总结:函数参数传递时:pass-by-value < pass-by-reference < pass-by-reference-to-const
复制代码

Item2:尽量以const、enum、inline替换#define的使用

  1. 总结:对于单纯的常量,尽量以const、enum代替#define
  2. 对于形式函数的宏(macros),最好用inline函数替换#define
复制代码

Item3:尽量使用const提高效率

  1. 总结:尽量使用const可以帮助编译器检测出错误的用法;用const可以是函数接口更加明显;当const与non-const有实质性的等价时,可以用non-const调用const函数。
复制代码

Item4:确定对象使用之前已经被初始化

  1. 1. 内置类型的初始化;
  2. 2. 类内的内置类型的初始化:一般在构造函数处初始化,在构造函数处用成员初始列初始化,而非在构造函数中以赋值的形式初始化。初始化顺序尽量与声明时的顺序一致。
  3. 3. *为了避免跨编译单元的初始化,用local-static对象替换non-local-static对象。*
复制代码

第二章:构造/析构/赋值运算(constructors/destructors/assignment operators)

Item5:了解C++默默编写并调用了哪些函数

  1. 总结:c++构造了类之后,会默认构造一个copy构造函数、一个copy赋值操作符、一个析构函数。这些函数军事public且inline的。
复制代码

Item6:若不想编译器自动生成的函数,则应该明确的拒绝

  1. 总结:将copy构造函数与copy赋值操作符声明为private并且不予实现。
复制代码

Item7:为多态基类声明virtual析构函数

  1. 总结:有多态性质的基类应该有virtual析构函数;如果设计的类不是用于基类,那么久不应该声明virtual析构函数。
复制代码

Item8:别让异常逃离析构函数

  1. 总结:1.析构函数绝对不要吐出异常。如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下它们并且结束程序;
  2. 2.如果要对某个函数执行期间抛出的异常做出反应,那么class应该提供一个普通函数执行该操作,而不是在析构函数中执行该操作。
复制代码

Item9:绝不在构造和析构过程中调用virtual函数

  1. 因为这类虚函数的调用绝不下降至派生类中。
复制代码

Item10:令operator=返回一个reference to *this

Item11:在operator=中处理“自我赋值”

  1. 1.确保当对象自我赋值时operator=的良好行为。其中的技术包括比较:
  2. ①对象来源与目标对象的地址;
  3. ②精心周到的语句顺序;
  4. ③copy-and-swap
  5. 2.确保任何函数操作一个以上的对象时,而其中的多个对象是一个对象时,其行为仍然正确。
复制代码

Item12:复制对象时,不要忘记其每个部分

  1. copying性质的函数应该确保复制对象内的所有成员变量,基于其base class成分。
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行