Effective C++中的条款

原创 2006年05月18日 15:37:00

改变旧有的C习惯:(shifting from C to C++)
1. 尽量以const和inline取代#define(prefer const and inline to define)
2. 尽量以<iostream>取代<stdio.h>(prefer iostream to stdio.h)
3. 尽量以new和delete取代malloc和free(prefer new and delete to malloc and free)
4. 尽量使用C++风格的注释(prefer C++ style commnents)
内存管理:(memory management)
5. 使用相同形式的new和delete(Use the same form in corresponding uses of new and delete)
6. 记得在destructor中以delete对付pointer member(Use delete on pointer member in destructors)
7. 对内存不足的状况预做准备(Be prepared for out-of-memory conditions)
8. 撰写operator new和operator delete是应遵循公约(Adhere to convention when writing operator new and delete)
9. 避免遮掩了new的正规形式(Avoid hiding the new)
10. 如果写了一个operator new对应的也要写一个operator delete(Write operator delete if you write operator new)
构造函数,析构函数和Assignment运算符:(Constructors, Destructors, and Assignment Operators)
11. 如果class内动态配置有内存,请为此class声明一个copy constructor和一个assignment运算符(Declare a copy constructor and an assignment operator for class with dynamically allocated memory)
12. 在constructor中尽量以initialization动作取代assignment动作(Prefer initialization to assignment in constructors)
13. initialization list中的members初始化次序应该和其在class内的声明次序相同(List members in an initialization list in the order in which they are declared)
14. 总是让base class拥有virtual destructors(Make sure base class have virtual destructors)
15. 令operator=传回“*this的reference”(Have operator= return a reference to *this)
16. 在operator=中为所有的data members设定(赋值)内容(Assign to all data members in operator=)
17. 在operator=中检查是否“自己赋值给自己”(Check for assignment to self in operator=)
类与函数的设计和声明:(Classes and Funcations: Design and Declaration)
18. 努力让接口完满且最小化(Strive for class interfaces that are complete and minimal)
19. 区分member functions,non-member functions和friend functions(Differentiate among member of functions, non-member functions, and friend functions)
20. 避免将data members放在公开接口中(Avoid data members in the public interface)
21. 尽可能使用const(Use const whenever possible)
22. 尽量使用pass-by-reference(传址)(Prefer pass-by-reference to pass-by-value)
23. 当你必须传回object时,不要尝试传回reference(Don't try to return a reference when you must return an object)
24. 在函数重载和参数缺省化之间,谨慎抉择(Choose carefully between function overloading and parameter defaulting)
25. 避免对指针型别和数值型别进行重载(Avoid overloading on a pointer and a numerical type)
26. 防卫潜伏的(模棱两可)状态(Guard against potential ambiguity)
27. 如果不想使用编译器暗自产生的member functions,就应该明白拒绝它(Explicitly disallow use of implicitly generated member functions you don't want)
28. 尝试切割global namespace(全局命名空间)(Partition the global namespace)
类与函数实现:(Classes and Functions: Implementation)
29. 避免传回内部数据的handles(Avoid returning)
30. 避免写出member functions,传回一个non-const pointer或reference并以之指向较低存取层级的members(Avoid member functions that return non-const pointer or references to members less accessible than themselves)
31. 千万不要传回“函数内local对象的reference”(Never return a reference to a local object or to a dereferenced pointer initialized by new with in the function)
32. 尽可能延缓变量定义式的出现(Postpone varible definitions as long as possible)
33. 明智的运用inlining(Use inlining judiciously)
34. 将文件之间的编译依赖关系降至最低(Minimize compilation dependencies between files)
继承关系和面向对象设计(Inheritance and object-Oriented Design)
35. 确定你的public inheritance模塑出“is-a”关系(Make sure public inheritance models)
36. 区分接口函数和实现继承(Differentiate between inheritance of interface and inheritance of implementaion)
37. 绝对不要重新定义继承而来的非虚拟函数(Never redefine an inherited nonvitual function)
38. 绝对不要定义继承而来的缺省参数值(Never redefine an inherited default parameter value)
39. 避免在继承体系中作向下的转型动作(Avoid casts down the inheritance hierarchy)
40. 通过layering技术来模塑has-a或is-implemented-in-terms-of的关系(Model)
41. 区分inheritance和templates(Differentiate between inheritance and templates)
42. 明智的运用私有继承(Use private inheritance judiciously)
43. 明智的运用多继承(Use muliple inhertance judiciously)
44. 说出你的意思并了解你所说的每一句话(Say what you mean; understand what you're saying)
杂项讨论:(Miscellany)
45. 清楚知道C++编译器为我们完成和调用那些函数(Know what function C++ silently writes and calls)
46. 宁愿编译和连接时出错也不要执行时出错(Prefer compile-time and line-time errors to runtime errors)
47. 使用non-local static objects之前先确定它已有初值(Ensure that non-local static objects are initialized before they're used)
48. 不要对编译器的警告视为不见(Pay attention to compiler warnings)
49. 尽量让自己熟悉C++标准库(Familiarize yourself with the standard library)
50. 加强自己对C++的了解(Improve your understanding of C++)

相关文章推荐

Effective C++中文版(带完整条款书签)

  • 2016年06月02日 18:33
  • 16.85MB
  • 下载

Effective c++ 条款16学习笔记: 成对使用new和delete时要采取相同形式

User the same from in corresponding uses of new and deletes 条款16:User the same from in correspond...

《More Effective C++》条款26:限制某个Class所能产生的对象数量

问题来源:假设系统中只有一台打印机,如何把打印机对象数止限定为一个。或者系统只提供16个可分发出去的文件描述符,如何确保文件描述符对象存在的数目不能超过16个。 在具体的应用过程中,我们可能需要限制...
  • hxz_qlh
  • hxz_qlh
  • 2013年11月04日 21:15
  • 877

effective C++笔记之条款43: 明智地使用多继承(MI)

l        多继承带来了单继承中绝对不会存在的复杂性。最基本的一条是二义性。如果一个派生类从多个基类继承了一个成员名,所有对这个名字的访问都是二义的;你必须明确地说出你所指的是哪个成员。如下所示...
  • lifu119
  • lifu119
  • 2012年04月04日 15:21
  • 1694

Effective C++——条款38(第6章)

条款38:    通过复合模塑出has-a或"根据某物实现出" Model "has-a" or "is-implemented-in-terms-of" through composition  ...

effective C++笔记之条款31、32: 千万不要返回局部对象的引用,也不要返回函数内部用new初始化的指针所指对象的引用、尽可能地推迟变量的定义

条款31: 千万不要返回局部对象的引用,也不要返回函数内部用new初始化的指针所指对象的引用。 l        返回一个局部对象的引用。局部对象在被定义时创建,在离开函数体时被销毁。当函数返回时,...
  • lifu119
  • lifu119
  • 2012年03月20日 20:02
  • 1610

Effective Modern C++ 条款7 创建对象时区分( )和{ }

Effective Modern C++ 条款7

《Effective C++ 》条款9:永远不要在构造函数或析构函数中调用虚函数

我想以重复本文的主题开篇:不要在类的构造或者析构函数中调用虚函数,因为这种调用不会如你所愿,即使成功一点,最后还会使你沮丧不已。如果你以前是一个Java或者C#程序员,请密切注意本节的内容-这正是C+...
  • hxz_qlh
  • hxz_qlh
  • 2013年11月02日 21:55
  • 6405

【Effective c++】条款09:绝不再构造和析构过程中调用virtual函数

重点:你不该在构造函数和析构函数期间调用virtual函数。   例: class Transaction//所有交易的基类 { public:   Transaction();   virtu...

《Effective C++》:条款35:考虑virtual函数以外的其他选择

virtual函数在派生中经常用到,在遇到一些问题时用virtual函数没问题,但是有时候我们应该思考一下是否有替代方案,以此来拓宽我们的视野。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Effective C++中的条款
举报原因:
原因补充:

(最多只允许输入30个字)