全为自己翻译, 如有不妥, 望请斧正.
Programming In C++: [1] Represent ideas directly in code. [2] Represent relationships among ideas directly in code (e.g., hierarchical, parametric, and ownership relationships). [3] Represent independent ideas independently in code. [4] Keep simple things simple (without making complex things impossible). 以上的意思是, 代码要更简单的表达思维, 而不是相反 [5] Prefer statically type-checked solutions (when applicable). 尽量使用静态类型检查 [6] Keep information local (e.g., avoid global variables, minimize the use of pointers). 尽量使用局部变量, 尽可能少使用指针 [7] Don’t overabstract (i.e., don’t generalize, introduce class hierarchies, or parameterize beyond obvious needs and experience). 不要过度抽象 To C++ers: [1] Use constructors to establish invariants. 使用构造器创建常量 [2] Use constructor/destructor pairs to simplify resource management. 成对使用构造函数与析构函数以简便地管理资源 [3] Avoid ‘‘naked’’ new and delete. 避免使用裸指针 [4] Use containers and algorithms rather than built-in arrays and ad hoc code. 使用 STL 的容器与算法, 而不是内置的数组 [5] Prefer standard-library facilities to locally developed code. 尽量使用标准库, 除非你有自信更好 [6] Use exceptions, rather than error codes, to report errors that cannot be handled locally. 使用 exception 机制, 而不是放任错误的代码, 报告本地难以解决的问题 [7] Use move semantics to avoid copying large objects. 移动较大的对象, 而不是拷贝之 [8] Use unique_ptr to reference objects of polymorphic type. 使用 unique_ptr 去引用实现多态的对象 [9] Use shared_ptr to reference shared objects, that is, objects without a single owner that is responsible for their destruction. 使用 shared_ptr 引用需要被分享的对象 [10] Use templates to maintain static type safety (eliminate casts) and avoid unnecessary use of class hierarchies. 使用模版实现静态类型安全, 避免不必要的继承 To C-ers [1] Don’t think of C++ as C with a few features added. C++ can be used that way, but only suboptimally. To get really major advantages from C++ as compared to C, you need to apply different design and implementation styles. 别觉得 C++ 就是 C 加了点东西, 可以把 C++ 照着 C 这么用, 但不一定是最优选择, 新语言, 新思维 [2] Don’t write C in C++; that is often seriously suboptimal for both maintenance and perfor- mance. 别把 C++ 和 C 混着用, 这会影响双方的可维护性与性能 [3] Use the C++ standard library as a teacher of new techniques and programming styles. Note the difference from the C standard library (e.g., = rather than strcpy() for copying and == rather than strcmp() for comparing). 以 C++ 标准库为师, 注意 C++ 与 C 的异同 [4] Macro substitution is almost never necessary in C++. Use const, constexpr, enum or enum class to define manifest constants, inline to avoid function-calling overhead, templates to specify families of functionsand types, and namespaces to avoid name clashes. 宏在 C++ 里不是必要的, 我设计 inline, enum, const, 模版命名空间啥的就是想替换它的 [5] Don’t declare a variable before you need it, and initialize it immediately. A declaration can occur anywhere a statement can, in for -statement initializers, and in conditions. 尽可能延后变量声明时间 [6] Don’t use malloc() . The new operator does the same job better, and instead of realloc() , try a vector. Don’t just replace malloc() and free() with ''naked'' new and delete . 用 new 与 delete 取代 malloc 与 free, 但也别直接替换, 想要可变数组请使用 vector 而不是 realloc [7] Avoid void∗ , unions, and casts, except deep within the implementation of some function or class. Their use limits the support you can get from the type system and can harm per- formance. In most cases, a cast is an indication of a design error. If you must use an explicit type conversion, try using one of the named casts (e.g., static_cast) for a more precise statement of what you are trying to do. 避免使用 void* union 与 cast, 如果非要显式转换, 请用 static_cast 什么的 [8] Minimize the use of arrays and C-style strings. C++ standard-library strings, arrays, and vectors can often be used to write simpler and more maintainable code compared to the traditional C style. In general, try not to build yourself what has already been provided by the standard library. 避免使用 C 风格的数组与字符串, vector 可以更简单的满足你; 多用标准库, 除非你更牛 [9] Avoid pointer arithmetic except in very specialized code (such as a memory manager) and for simple array traversal (e.g., ++p ). 避免指针的四则运算, 除非是遍历数组 [10] Do not assume that something laboriously written in C style (avoiding C++ features such as classes, templates, and exceptions) is more efficient than a shorter alternative (e.g., using standard-library facilities). Often (but of course not always), the opposite is true. 你自己搞的东西真不一定有标准库性能好, 别想多了