《Effective C++》一书以其深刻地剖析了C++编程语言,被广泛地认可为提升编程技能的宝典,本书不仅是基础知识的梳理,更是编程智慧的集结,帮助读者从程序员成长为真正的C++工匠,作者Scott Meyers以其独到的见解和轻松幽默的笔触,带领读者穿梭于C++的世界,解读55个具体实践,让读者在享受阅读的同时,也能深刻理解C++的内涵,书中的内容不仅有助于提升编程技术,还激发了对编程本质的思考,这本书之所以能够成为经典,是因为它不简单地传授知识,更重要的是它传递了一种思考和解决问题的方法论,无数C++程序员的案头必备之作,继续在全球编程界引起深远影响。
本书是一本轻巧短小精悍密度高的的“权威专家工作经验积累”。
假如你宣称自身是个C程序员以前,那么你一定得读过这本书。
认真地念完这本书,一般的C程序员还可以摇身一变变成大师级C程序员。
它是创作者聪慧的再一次提炼出和升化,你没有理由还要原地踏步走,赶快阅读文章这本书,奋起直追吧。
有些人说c程序员能够 分成两大类,读过effectivec的和没念过的。全球*c高手scottmeyers出道之作的第三版确实当之无愧那样的点评。当您读过这部《EffectiveC:改善程序与设计的55个具体做法》以后,就得到了快速提高自己c功底的一个突破口。
在国际性上,本书所造成的强烈反响,蔓延到全部电子信息技术的出版发行行业,余音迄今未绝。基本上在全部c书藉的强烈推荐名册上,本书都是坐落于前三名。创作者精湛的技术性掌握力、与众不同的角度、风趣轻轻松松的写作风格、别具匠心的內容机构,都遭受巨大的青睐和效仿。这类独特的状况,只有表述为大家对这部《EffectiveC:改善程序与设计的55个具体做法》真心诚意的赞扬和青睐。
目录
- 译序 vii
- 中英简繁术语对照 ix
- 目录 xvii
- 序言 xxi
- 致谢 xxiii
- 导读 1
- 1. 让自己习惯C 11
- Accustoming Yourself to C 11
- 条款01:视C 为一个语言联邦 11
- View C as a fedueration of languages 11
- 条款02:尽量以const, enum, inline替换 #define 13
- Prefer consts,enums, and inlines to #defines. 13
- 条款03:尽可能使用const 17
- Use const whenever possible. 17
- 条款04:确定对象被使用前已先被初始化 26
- Make sure that objects are initialized before they're used. 26
- 2. 构造/析构/赋值运算 34
- Constructors, Destructors, and Assignment Operators 34
- 条款05:了解C 默默编写并调用哪些函数 34
- Know what functions C silently writes and calls. 34
- 条款06:若不想使用编译器自动生成的函数,就该明确拒绝 37
- Explicitly disallow the use of compiler-generated functions you do not want. 37
- 条款07:为多态基类声明virtual析构函数 40
- Declare destructors virtual in polymorphic base classes. 40
- 条款08:别让异常逃离析构函数 44
- Prevent exceptions from leaving destructors. 44
- 条款09:绝不在构造和析构过程中调用virtual函数 48
- Never call virtual functions during construction or destruction. 48
- 条款10:令operator= 返回一个reference to *this 52
- Have assignment operators return a reference to *this. 52
- 条款11:在operator= 中处理「“自我赋值」” 53
- Handle assignment to self in operator=. 53
- 条款12:复制对象时勿忘其每一个成分 57
- Copy all parts of an object. 57
- 3. 资源管理 61
- Resource Management 61
- 条款13:以对象管理资源 61
- Use objects to manage resources. 61
- 条款14:在资源管理类中小心coping行为 66
- Think carefully about copying behavior in resource-managing classes. 66
- 条款15:在资源管理类中提供对原始资源的访问 69
- Provide access to raw resources in resource-managing classes. 69
- 条款16:成对使用new和delete时要采取相同形式 73
- Use the same form in corresponding uses of new and delete. 73
- 条款17:以独立语句将newed对象置入智能指针 75
- Store newed objects in smart pointers in standalone statements. 75
- 4. 设计与声明 78
- Designs and Declarations 78
- 条款18:让接口容易被正确使用,不易被误用 78
- Make interfaces easy to use correctly and hard to use incorrectly. 78
- 条款19:设计class犹如设计type 84
- Treat class design as type design. 84
- 条款20:宁以pass-by-reference-to-const替换pass-by-value 86
- Prefer pass-by-reference-to-const to pass-by-value. 86
- 条款21:必须返回对象时,别妄想返回其reference 90
- Don't try to return a reference when you must return an object. 90
- 条款22:将成员变量声明为private 94
- Declare data members private. 94
- 条款23:宁以non-member、non-friend替换member函数 98
- Prefer non-member non-friend functions to member functions. 98
- 条款24:若所有参数皆需类型转换,请为此采用non-member函数 102
- Declare non-member functions when type conversions should apply to all parameters. 102
- 条款25:考虑写出一个不抛异常的swap函数 106
- Consider support for a non-throwing swap. 106
- 5. 实现 113
- Implementations 113
- 条款26:尽可能延后变量定义式的出现时间 113
- Postpone variable definitions as long as possible. 113
- 条款27:尽量少做转型动作 116
- Minimize casting. 116
- 条款28:避免返回handles指向对象内部成分 123
- Avoid returning "handles" to object internals. 123
- 条款29:为“「异常安全」”而努力是值得的 127
- Strive for exception-safe code. 127
- 条款30:透彻了解inlining的里里外外 134
- Understand the ins and outs of inlining. 134
- 条款31:将文件间的编译依存关系降至最低 140
- Minimize compilation dependencies between files. 140
- 6. 继承与面向对象设计 149
- Inheritance and Object-Oriented Design 149
- 条款32:确定你的public继承塑模出is-a关系 150
- Make sure public inheritance models "is-a." 150
- 条款33:避免遮掩继承而来的名称 156
- Avoid hiding inherited names. 156
- 条款34:区分接口继承和实现继承 161
- Differentiate between inheritance of interface and inheritance of implementation. 161
- 条款35:考虑virtual函数以外的其它其他选择 169
- Consider alternatives to virtual functions. 169
- 条款36:绝不重新定义继承而来的non-virtual函数 178
- Never redefine an inherited non-virtual function. 178
- 条款37:绝不重新定义继承而来的缺省参数值 180
- Never redefine a function's inherited default parameter value. 180
- 条款38:通过复合塑模出has-a或"根据某物实现出" 184
- Model "has-a" or "is-implemented-in-terms-of" through composition. 184
- 条款39:明智而审慎地使用private继承 187
- Use private inheritance judiciously. 187
- 条款40:明智而审慎地使用多重继承 192
- Use multiple inheritance judiciously. 192
- 7. 模板与泛型编程 199
- Templates and Generic Programming 199
- 条款41:了解隐式接口和编译期多态 199
- Understand implicit interfaces and compile-time polymorphism. 199
- 条款42:了解typename的双重意义 203
- Understand the two meanings of typename. 203
- 条款43:学习处理模板化基类内的名称 207
- Know how to access names in templatized base classes. 207
- 条款44:将与参数无关的代码抽离templates 212
- Factor parameter-independent code out of templates. 212
- 条款45:运用成员函数模板接受所有兼容类型 218
- Use member function templates to accept "all compatible types." 218
- 条款46:需要类型转换时请为模板定义非成员函数 222
- Define non-member functions inside templates when type conversions are desired. 222
- 条款47:请使用traits classes表现类型信息 226
- Use traits classes for information about types. 226
- 条款48:认识template元编程 233
- Be aware of template metaprogramming. 233
- 8. 定制new和delete 239
- Customizing new and delete 239
- 条款49:了解new-handler的行为 240
- Understand the behavior of the new-handler. 240
- 条款50:了解new和delete的合理替换时机 247
- Understand when it makes sense to replace new and delete. 247
- 条款51:编写new和delete时需固守常规 252
- Adhere to convention when writing new and delete. 252
- 条款52:写了placement new也要写placement delete 256
- Write placement delete if you write placement new. 256
- 9. 杂项讨论 262
- Miscellany 262
- 条款53:不要轻忽编译器的警告 262
- Pay attention to compiler warnings. 262
- 条款54:让自己熟悉包括TR1在内的标准程序库 263
- Familiarize yourself with the standard library, including TR1. 263
- 条款55:让自己熟悉Boost 269
- Familiarize yourself with Boost. 269
- A 本书之外 273
- B 新旧版条款对映 277
- 索引 280