C++ is a Goliath of a programming language and the one essential reference book in every C++ programmer’s quiver is the The C++ Programming Language by Bjarne Stroustrup. This is not a book to read cover-to-cover, which was possible with The C Programming Language by Kernighan and Ritchie.
After many years of C++, to me it is a mess of a language. It has a C past which it cannot and will not shed. It tries to acquire every possible programming paradigm in the worst possible way (procedural, object-oriented, functional and template metaprogramming). And if you follow its development over the years, you quickly realize why design-by-committee is the worst possible way to evolve a language! 😐
Why that rant on C++? Well, all the confusing mess of C++ continues on in the language reference book by its creator. The organization of the chapters is disappointing and Stroustrup rambles quite a bit when not needed. And when clarification is sorely needed, the minutiae are no where to be found. For example, the explicit constructor is useful to prevent unintended implicit conversions. If you look up explicit in the book to see how to use it, you will not know if this qualifier should be specified in the header or source file or in both. Actually, this qualifier is used in the header and not allowed in the source file, but you would not find that information in this reference.
Also, the examples are uninteresting and the book on the whole is uninspiring. However, since the actual C++ standard is so goddamn un-readable by any mortal, this book remains the prime reference to look up anything about the language. (Thankfully, the STL has a much better book by Nicolai M. Josuttis.) Whenever I need any clarification on any C++ language feature, I look up the index of this book and jump from there. Last updated in 2000 for its Special Edition (3rd Edition), this book is badly in need of a re-write due to the C++0X features introduced since then.