The authors are widely considered to be among the world’s foremost authorities on C++. What is perhaps even more important for the purposes of this review is that the authors are not only knowledgeable, but are also great teachers: they have used the material in this book for their professional-education course at Stanford University, and their pedagogic skills show on every page. It comes as no surprise, then, that “Accelerated C++” is consistently recommended to programmers who wish to learn C++.
The Good: This book does not talk down to the reader. It assumes that you are intelligent and implicitly expects you to have previously come into contact with either procedural or object-oriented programming. Many different topics are covered in a short space (around 300 pages in total), but the text is highly readable owing to the authors’s relaxed tone, as well as their many cross-references and their detailed explanations of the examples (after all, the book’s subtitle is “practical programming by example”). Equally important, the authors have provided on their website the source code for all the examples in the book (and more), packaged for different platforms. As should be obvious, modifying, compiling, and running the code in parallel to reading the text is integral to understanding the concepts being introduced. In contradistinction to many other popular volumes, this book teaches real C++, not “C with classes”. To illustrate this point, let me note that pointers and arrays are only introduced in Chapter 10 (of 16). “Accelerated C++” jumps right in and describes a variety of topics that are of use to professional C++ programmers, such as standard library algorithms, templates, allocators, dynamic binding, and more.
The Bad: Some readers may find the student-grading and character-pictures examples a little boring (though what simple example isn’t somewhat boring?). Also, the difficulty level of the exercises is not consistent (e.g. some have already been worked out in the provided source code). This book isn’t really great as a reference: new concepts are introduced when they are needed for the purposes of the examples. This means that the chapters cannot really be read out of order. Futhermore, certain things like bitsets, switches, enums, and multiple inheritance are either relegated to the Appendices or are not mentioned at all. In a similar vein, object-oriented programming is not thoroughly discussed (as can be expected from such a short book): e.g., inheritance is introduced in chapter 13 (of 16). Finally, this book was published in 2000 and quite a bit has changed in the meantime. Most notably, we are now expecting a new standard to come out (still known as C++0x). Unfortunately, this book doesn’t talk about TR1 (a specification for functionality being added to C++’s standard library) or boost (a collection of libraries offering TR1 implementations and much more), or threading in C++. A new edition of “Accelerated C++” apparently is in the works.
Lest the reader feel that I am being too negative, I note that it is impossible for one book to please everyone and cover everything, while being always up-to-date and still remaining short. In a nutshell, this book is great at what it intends to be: a fast-paced, authoritative, and pedagogically sound introduction to (1998/2003) standard C++ . This book definitely deserves 5 stars.
My two cents on recommended follow-ups:
* C++ Primer, 4th edition, by Stanley B. Lippman, Josee Lajoie, Barbara E. Moo
A great second book which can be used to solidify and expand your understanding. The “C++ Primer” is over 800 pages long, but it is so well written that it can either be read cover-to-cover or used as a reference (see also my review of it on amazon).
* Effective C++, 3rd edition, by Scott Meyers
This assumes you have already come across all of the material contained in “Accelerated C++” and in the “C++ Primer”. It offers solid advice on numerous aspects of effective C++ development. Meyers also describes a few design patterns as well as more modern topics like TR1.