25 Women to Read Before You Die

Special Offers see all

Enter to WIN a $100 Credit

Subscribe to PowellsBooks.news
for a chance to win.
Privacy Policy

Visit our stores

    Recently Viewed clear list

    Interviews | August 12, 2015

    Jill Owens: IMG Eli Gottlieb: The Powells.com Interview

    Eli GottliebEli Gottlieb has done something unusual — he's written two novels, 20 years apart, from opposing but connected perspectives. The Boy Who Went... Continue »
    1. $17.47 Sale Hardcover add to wish list

      Best Boy

      Eli Gottlieb 9781631490477

Qualifying orders ship free.
New Trade Paper
Ships in 1 to 3 days
Add to Wishlist
available for shipping or prepaid pickup only
Available for In-store Pickup
in 7 to 12 days
Qty Store Section
1 Remote Warehouse Computer Languages- C++

C++ Coding Standards: 101 Rules, Guidelines, and Best Practices (C++ In-Depth)


C++ Coding Standards: 101 Rules, Guidelines, and Best Practices (C++ In-Depth) Cover


Synopses & Reviews

Publisher Comments:

Consistent, high-quality coding standards improve software quality, reduce time-to-market, promote teamwork, eliminate time wasted on inconsequential matters, and simplify maintenance. Now, two of the world's most respected C++ experts distill the rich collective experience of the global C++ community into a set of coding standards that every developer and development team can understand and use as a basis for their own coding standards.

The authors cover virtually every facet of C++ programming: design and coding style, functions, operators, class design, inheritance, construction/destruction, copying, assignment, namespaces, modules, templates, genericity, exceptions, STL containers and algorithms, and more. Each standard is described concisely, with practical examples. From type definition to error handling, this book presents C++ best practices, including some that have only recently been identified and standardized-techniques you may not know even if you've used C++ for years. Along the way, you'll find answers to questions like

  • What's worth standardizing--and what isn't?
  • What are the best ways to code for scalability?
  • What are the elements of a rational error handling policy?
  • How (and why) do you avoid unnecessary initialization, cyclic, and definitional dependencies?
  • When (and how) should you use static and dynamic polymorphism together?
  • How do you practice "safe" overriding?
  • When should you provide a no-fail swap?
  • Why and how should you prevent exceptions from propagating across module boundaries?
  • Why shouldn't you write namespace declarations or directives in a header file?
  • Why should you use STL vector and string instead of arrays?
  • How do you choose the right STL search or sort algorithm?
  • What rules should you follow to ensure type-safe code?

Whether you're working alone or with others, C++ Coding Standards will help you write cleaner code--and write it faster, with fewer hassles and less frustration.

Book News Annotation:

Authors and experts Sutter and Alexandrescu distill the experiences of the C++ community into a set of coding standards intended to improve quality, reduce time-to-market (and time wasted), and simplify maintenance. They describe what to standardize; how to design and code for more efficiency; ways to make best use of functions and operators, class design and inheritance; how to make construction, destruction and copying more efficient; when to use namespaces, modules, templates, and genericity; how to handle errors and exceptions, containers, and algorithms; and how to manage type safety.
Annotation 2004 Book News, Inc., Portland, OR (booknews.com)

About the Author

Herb Sutter is the author of three highly acclaimed books, Exceptional C++ Style, Exceptional C++, and More Exceptional C++ (Addison-Wesley). He chairs the ISO C++ standards committee, and is contributing editor and columnist for C/C++ Users Journal. As a software architect for Microsoft, Sutter leads the design of C++ language extensions for .NET programming.

Andrei Alexandrescu is the author of the award-winning book Modern C++ Design (Addison-Wesley, 2001) and is a columnist for C/C++ Users Journal.

Table of Contents


1. Organizational and Policy Issues.

    Don't sweat the small stuff. (Or: Know what not to standardize.).

    Compile cleanly at high warning levels.

    Use an automated build system.

    Use a version control system.

    Invest in code reviews.

2. Design Style.

    Give one entity one cohesive responsibility.

    Correctness, simplicity, and clarity come first.

    Know when and how to code for scalability.

    Don't optimize prematurely.

    Don't pessimize prematurely.

    Minimize global and shared data.

    Hide information.

    Know when and how to code for concurrency.

    Ensure resources are owned by objects. Use explicit RAII and smart pointers.

3. Coding Style.

    Prefer compile- and link-time errors to run-time errors.

    Use const proactively.

    Avoid macros.

    Avoid magic numbers.

    Declare variables as locally as possible.

    Always initialize variables.

    Avoid long functions. Avoid deep nesting.

    Avoid initialization dependencies across compilation units.

    Minimize definitional dependencies. Avoid cyclic dependencies.

    Make header files self-sufficient.

    Always write internal #include guards. Never write external #include guards.

4. Functions and Operators.

    Take parameters appropriately by value, (smart) pointer, or reference.

    Preserve natural semantics for overloaded operators.

    Prefer the canonical forms of arithmetic and assignment operators.

    Prefer the canonical form of ++ and --. Prefer calling the prefix forms.

    Consider overloading to avoid implicit type conversions.

    Avoid overloading &&, , or , (comma).

    Don't write code that depends on the order of evaluation of functionarguments.

5. Class Design and Inheritance.

    Be clear what kind of class you're writing.

    Prefer minimal classes to monolithic classes.

    Prefer composition to inheritance.

    Avoid inheriting from classes that were not designed to be base classes.

    Prefer providing abstract interfaces.

    Public inheritance is substitutability.

    Inherit, not to reuse, but to be reused.

    Practice safe overriding.

    Consider making virtual functions nonpublic, and public functions nonvirtual.

    Avoid providing implicit conversions.

    Make data members private, except in behaviorless aggregates (C-stylestructs).

    Don't give away your internals.

    Pimpl judiciously.

    Prefer writing nonmember nonfriend functions.

    Always provide new and delete together.

    If you provide any class-specific new, provide all of the standard forms (plain, in-place, and nothrow).

6. Construction, Destruction, and Copying.

    Define and initialize member variables in the same order.

    Prefer initialization to assignment in constructors.

    Avoid calling virtual functions in constructors and destructors.

    Make base class destructors public and virtual, or protected and nonvirtual.

    Destructors, deallocation, and swap never fail.

    Copy and destroy consistently.

    Explicitly enable or disable copying.

    Avoid slicing. Consider Clone instead of copying in base classes.

    Prefer the canonical form of assignment.

    Whenever it makes sense, provide a no-fail swap (and provide it correctly).

7. Namespaces and Modules.

    Keep a type and its nonmember function interface in the same namespace.

    Keep types and functions in separate namespaces unless they're specifically intended to work together.

    Don't write namespace usings in a header file or before an #include.

    Avoid allocating and deallocating memory in different modules.

    Don't define entities with linkage in a header file.

    Don't allow exceptions to propagate across module boundaries.

    Use sufficiently portable types in a module's interface.

8. Templates and Genericity.

    Blend static and dynamic polymorphism judiciously.

    Customize intentionally and explicitly.

    Don't specialize function templates.

    Don't write unintentionally nongeneric code.

9. Error Handling and Exceptions.

    Assert liberally to document internal assumptions and invariants.

    Establish a rational error handling policy, and follow it strictly.

    Distinguish between errors and non-errors.

     Design and write error-safe code.

    Prefer to use exceptions to report errors.

    Throw by value, catch by reference.

    Report, handle, and translate errors appropriately.

    Avoid exception specifications.

10. STL: Containers.

    Use vector by default. Otherwise, choose an appropriate container.

    Use vector and string instead of arrays.

    Use vector (and string::c_str) to exchange data with non-C++ APIs.

    Store only values and smart pointers in containers.

    Prefer push_back to other ways of expanding a sequence.

    Prefer range operations to single-element operations.

    Use the accepted idioms to really shrink capacity and really erase elements.

11. STL: Algorithms.

    Use a checked STL implementation.

    Prefer algorithm calls to handwritten loops.

    Use the right STL search algorithm.

    Use the right STL sort algorithm.

    Make predicates pure functions.

    Prefer function objects over functions as algorithm and comparer arguments.

    Write function objects correctly.

12. Type Safety.

    Avoid type switching; prefer polymorphism.

    Rely on types, not on representations.

    Avoid using reinterpret_cast.

    Avoid using static_cast on pointers.

    Avoid casting away const.

    Don't use C-style casts.

    Don't memcpy or memcmp non-PODs.

    Don't use unions to reinterpret representation.

    Don't use varargs (ellipsis).

    Don't use invalid objects. Don't use unsafe functions.

    Don't treat arrays polymorphically.


Summary of Summaries.


Product Details

Sutter, Herb
Addison-Wesley Professional
Alexandrescu, Andrei
Programming Languages - C
C (computer program language)
Computer Languages-C++
Edition Description:
Trade paper
C++ In-Depth Series
Publication Date:
November 2004
Grade Level:
Professional and scholarly
9.1 x 7.3 x 0.7 in 431 gr

Other books you might like

  1. Object Oriented Perl: A... Used Trade Paper $25.00
  2. Effective STL: 50 Specific Ways to... Used Trade Paper $32.00
  3. Effective C++ 3RD Edition 55... New Trade Paper $47.25
  4. Design Patterns: Elements of...
    Used Hardcover $33.00
  5. Higher-Order Perl
    New Trade Paper $89.11
  6. A Pirate Looks at Fifty Used Trade Paper $2.95

Related Subjects

Computers and Internet » Computer Languages » C++
History and Social Science » Linguistics » Specific Languages and Groups
Reference » Words Phrases and Language
Travel » General

C++ Coding Standards: 101 Rules, Guidelines, and Best Practices (C++ In-Depth) New Trade Paper
0 stars - 0 reviews
$61.25 In Stock
Product details 240 pages Addison-Wesley Professional - English 9780321113580 Reviews:
  • back to top


Powell's City of Books is an independent bookstore in Portland, Oregon, that fills a whole city block with more than a million new, used, and out of print books. Shop those shelves — plus literally millions more books, DVDs, and gifts — here at Powells.com.