Dr. Dobb's is part of the Informa Tech Division of Informa PLC

This site is operated by a business or businesses owned by Informa PLC and all copyright resides with them. Informa PLC's registered office is 5 Howick Place, London SW1P 1WG. Registered in England and Wales. Number 8860726.

Channels ▼

More Exceptional C++

More Exceptional C++


Yes, it's the return of Herb Sutter, with "40 New Engineering Puzzles, Programming Problems, and Solutions." If you thought that you had your back covered after reading the excellent predecessor, Exceptional C++ [1], think again.

One should expect quite a lot from a book like this; it's part of Bjarne Stroustrup's [2] In-Depth Series [3], which is a promise of quality in and of itself. Furthermore, if you know who Herb Sutter is, and maybe have read the previous book in the series, you demand cutting-edge material, generously sprinkled with insights extraordinaire. The question, then, is whether this book delivers according to your expectations. We shall see.

What's So Special about This Book?

You read CUJ because it offers something unique that is valuable to you, and the same applies to the books you buy -- if there's no unique value that applies to you, there's no reason to spend time and money. I'll cut right to the chase and list the major themes (and thus values) in this book:

  • How to use the C++ Standard library effectively.
  • Exception safety: what it is, what it isn't, and how to get there.
  • Modern use of C++: generic programming, use of namespaces, etc.
These themes are recurring in the book, and they are presented in ways that make sense in real design and real code. If two or more of the aforementioned domains are important to you, make sure to get a copy of More Exceptional C++, because much of the material isn't covered elsewhere.


The book is divided into items, where each item starts with a question, which is then answered in great detail. Each item is self-contained, although some are also part of miniseries. There's a difficulty rating attached to the items, to give a hint of how hard it is to solve the problems. Furthermore, the book is divided into seven different subsections:

  • Generic Programming and the C++ Standard Library
  • Optimization and Performance
  • Exception Safety Issues and Techniques
  • Inheritance and Polymorphism
  • Memory and Resource Management
  • Free Functions and Macros
  • Miscellaneous Topics
Wherever applicable, the C++ Standard library tools are utilized to provide the answer or are part of the questions.

Should You Read This Book?

Yes, you definitely should, because it will make you a better programmer, and it's an enlightening and amusing book. The real question is probably when. To get the most out of these 40 items, a deep understanding of C++ and the standard library is a must [4]. For a programmer new to C++, reading this book would be intimidating. I'd recommend that at least some, and preferably all, of [5,6,7,8] are read before taking on More Exceptional C++.

Note that the value of the book goes beyond the items and the joy of being challenged, because these seemingly innocent questions bring forth an understanding of one's strengths and weaknesses in C++ (in general) and the standard library (in particular).

How Should You Read the Book?

Most importantly, do not read it in haste. Before you turn the page and start looking at the answer(s), try hard to solve the problem. It's fine to be wrong, to find a different solution, or to be caught in one of numerous traps; that's the path to real understanding. Personally, I find that it's much harder to pretend that I knew the right answer if I've given it my best shot, and failed.... The book doesn't impose a certain reading order, and my advice is to go wherever inspiration leads you -- the items are typically self-contained.


After a book such as Exceptional C++, which not only was true to its name, but also came across with inexorable C++ power and dazzling insights, it must be very, very hard to write the sequel. It's inevitable that comparisons are made between the two, so I'll tell it to you straight: More Exceptional C++ is at least as rewarding as its predecessor, and in particular, it seems more focused and better categorized. It's one of the best books on advanced C++ out there, and I would not leave home without it. Neither should you.


[1] Herb Sutter. Exceptional C++ (Addison-Wesley, 2000.)

[2] The Creator (of C++).

[3] The C++ In-Depth Series is published by Addison-Wesley, with books that are endorsed by Bjarne Stroustrup.

[4] To get a feel for your current level, as well as an idea of where these Items came from, visit <www.gotw.ca/gotw>.

[5] Stanley B. Lippman. Essential C++ (Addison-Wesley, 1999).

[6] Scott Meyers. Effective C++: 50 Specific Ways to Improve Your Programs and Design, 2nd Edition (Addison-Wesley, 1997).

[7] Nicolai M. Josuttis. The C++ Standard Library: A Tutorial and Reference (Addison-Wesley, 1999.)

[8] Bjarne Stroustrup. The C++ Programming Language, 3rd Edition (Addison-Wesley, 1997).

About the Author

Bjorn Karlsson works as a project manager at ReadSoft. He is the kind of out-going guy who likes to read ISO/IEC 14882:98. Bjorn can be reached at [email protected].

Related Reading

More Insights

Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.