| | Copyright |
| | The C++ In-Depth Series |
|
| | Titles in the Series |
| | Preface |
|
| | How to Use This Book |
|
| | Coding Standards and You |
|
| | About This Book |
|
| | Acknowledgments |
| | Organizational and Policy Issues |
|
| |
Chapter 0.
Don't sweat the small stuff. (Or: Know what not to standardize.) |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | References |
|
| |
Chapter 1.
Compile cleanly at high warning levels |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 2.
Use an automated build system |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 3.
Use a version control system |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 4.
Invest in code reviews |
|
| | Summary |
|
| | Discussion |
|
| | References |
| | Design Style |
|
| |
Chapter 5.
Give one entity one cohesive responsibility |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | References |
|
| |
Chapter 6.
Correctness, simplicity, and clarity come first |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | References |
|
| |
Chapter 7.
Know when and how to code for scalability |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 8.
Don't optimize prematurely |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 9.
Don't pessimize prematurely |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 10.
Minimize global and shared data |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 11.
Hide information |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 12.
Know when and how to code for concurrency |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 13.
Ensure resources are owned by objects. Use explicit RAII and smart pointers |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
| | Coding Style |
|
| |
Chapter 14.
Prefer compile- and link-time errors to run-time errors |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 15.
Use const proactively |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | References |
|
| |
Chapter 16.
Avoid macros |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 17.
Avoid magic numbers |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | References |
|
| |
Chapter 18.
Declare variables as locally as possible |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 19.
Always initialize variables |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 20.
Avoid long functions. Avoid deep nesting |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 21.
Avoid initialization dependencies across compilation units |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 22.
Minimize definitional dependencies. Avoid cyclic dependencies |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 23.
Make header files self-sufficient |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | References |
|
| |
Chapter 24.
Always write internal #include guards. Never write external #include guards |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
| | Functions and Operators |
|
| |
Chapter 25.
Take parameters appropriately by value, (smart) pointer, or reference |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 26.
Preserve natural semantics for overloaded operators |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
|
| |
None 27.
Prefer the canonical forms of arithmetic and assignment operators |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 28.
Prefer the canonical form of ++ and --. Prefer calling the prefix forms |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 29.
Consider overloading to avoid implicit type conversions |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 30.
Avoid overloading &&, ||, or , (comma) |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 31.
Don't write code that depends on the order of evaluation of function arguments |
|
| | Summary |
|
| | Discussion |
|
| | References |
| | Class Design and Inheritance |
|
| |
Chapter 32.
Be clear what kind of class you're writing |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 33.
Prefer minimal classes to monolithic classes |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 34.
Prefer composition to inheritance |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 35.
Avoid inheriting from classes that were not designed to be base classes |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | References |
|
| |
Chapter 36.
Prefer providing abstract interfaces |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 37.
Public inheritance is substitutability. Inherit, not to reuse, but to be reused |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 38.
Practice safe overriding |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | References |
|
| |
Chapter 39.
Consider making virtual functions nonpublic, and public functions nonvirtual |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 40.
Avoid providing implicit conversions |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 41.
Make data members private, except in behaviorless aggregates (C-style structs) |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 42.
Don't give away your internals |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 43.
Pimpl judiciously |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 44.
Prefer writing nonmember nonfriend functions |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | References |
|
| |
Chapter 45.
Always provide new and delete together |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 46.
If you provide any class-specific new, provide all of the standard forms (plain, in-place, and nothrow) |
|
| | Summary |
|
| | Discussion |
|
| | References |
| | Construction, Destruction, and Copying |
|
| |
Chapter 47.
Define and initialize member variables in the same order |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 48.
Prefer initialization to assignment in constructors |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 49.
Avoid calling virtual functions in constructors and destructors |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | References |
|
| |
Chapter 50.
Make base class destructors public and virtual, or protected and nonvirtual |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 51.
Destructors, deallocation, and swap never fail |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 52.
Copy and destroy consistently |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 53.
Explicitly enable or disable copying |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 54.
Avoid slicing. Consider Clone instead of copying in base classes |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 55.
Prefer the canonical form of assignment |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 56.
Whenever it makes sense, provide a no-fail swap (and provide it correctly) |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
| | Namespaces and Modules |
|
| |
Chapter 57.
Keep a type and its nonmember function interface in the same namespace |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | References |
|
| |
Chapter 58.
Keep types and functions in separate namespaces unless they're specifically intended to work together |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 59.
Don't write namespace usings in a header file or before an #include |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 60.
Avoid allocating and deallocating memory in different modules |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 61.
Don't define entities with linkage in a header file |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 62.
Don't allow exceptions to propagate across module boundaries |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 63.
Use sufficiently portable types in a module's interface |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | References |
| | Templates and Genericity |
|
| |
Chapter 64.
Blend static and dynamic polymorphism judiciously |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 65.
Customize intentionally and explicitly |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 66.
Don't specialize function templates |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | References |
|
| |
Chapter 67.
Don't write unintentionally nongeneric code |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
| | Error Handling and Exceptions |
|
| |
Chapter 68.
Assert liberally to document internal assumptions and invariants |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | References |
|
| |
Chapter 69.
Establish a rational error handling policy, and follow it strictly |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 70.
Distinguish between errors and non-errors |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | References |
|
| |
Chapter 71.
Design and write error-safe code |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | References |
|
| |
Chapter 72.
Prefer to use exceptions to report errors |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 73.
Throw by value, catch by reference |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | References |
|
| |
Chapter 74.
Report, handle, and translate errors appropriately |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 75.
Avoid exception specifications |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
| | STL: Containers |
|
| |
Chapter 76.
Use vector by default. Otherwise, choose an appropriate container |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | References |
|
| |
Chapter 77.
Use vector and string instead of arrays |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 78.
Use vector (and string::c_str) to exchange data with non-C++ APIs |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 79.
Store only values and smart pointers in containers |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | References |
|
| |
Chapter 80.
Prefer push_back to other ways of expanding a sequence |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 81.
Prefer range operations to single-element operations |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | References |
|
| |
Chapter 82.
Use the accepted idioms to really shrink capacity and really erase elements |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
| | STL: Algorithms |
|
| |
Chapter 83.
Use a checked STL implementation |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | References |
|
| |
Chapter 84.
Prefer algorithm calls to handwritten loops |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 85.
Use the right STL search algorithm |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 86.
Use the right STL sort algorithm |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 87.
Make predicates pure functions |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | References |
|
| |
Chapter 88.
Prefer function objects over functions as algorithm and comparer arguments |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 89.
Write function objects correctly |
|
| | Summary |
|
| | Discussion |
|
| | References |
| | Type Safety |
|
| |
Chapter 90.
Avoid type switching; prefer polymorphism |
|
| | Summary |
|
| | Discussion |
|
| | Examples |
|
| | References |
|
| |
Chapter 91.
Rely on types, not on representations |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 92.
Avoid using reinterpret_cast |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 93.
Avoid using static_cast on pointers |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 94.
Avoid casting away const |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 95.
Don't use C-style casts |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 96.
Don't memcpy or memcmp non-PODs |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 97.
Don't use unions to reinterpret representation |
|
| | Summary |
|
| | Discussion |
|
| | Exceptions |
|
| | References |
|
| |
Chapter 98.
Don't use varargs (ellipsis) |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 99.
Don't use invalid objects. Don't use unsafe functions |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Chapter 100.
Don't treat arrays polymorphically |
|
| | Summary |
|
| | Discussion |
|
| | References |
|
| |
Bibliography |
|
| |
Summary of Summaries |
|
| | Organizational and Policy Issues |
|
| | Design Style |
|
| | Coding Style |
|
| | Functions and Operators |
|
| | Class Design and Inheritance |
|
| | Construction, Destruction, and Copying |
|
| | Namespaces and Modules |
|
| | Templates and Genericity |
|
| | Error Handling and Exceptions |
|
| | STL: Containers |
|
| | STL: Algorithms |
|
| | Type Safety |