This is one of very few books I own for which it has been very much
worth buying each new edition
The book largely covers how Stroustrup thinks you should use C++
and contains examples of good use of C++ and good OO programming
style in general.
The first edition (copyright 1986)
was 328 pages, and written in a very similar style to
The C Programming Language.
The second edition (copyright 1991)
was 669 pages, with more examples and added material covering features added
to the C++ language since 1986. New features covered include
overloading resolution, memory management,
minor changes to C compatibility, multiple inheritance,
static and const member functions, protected, templates, and
This edition was not
designed to be read linearly. Parts of the end of each chapter were
marked as "advanced material" and were best read on the second or third
(or fourth) reading of the book and skipped on the first reading.
The third edition of the book (copyright 1997, 1020 pages) covers
features added to the language such as namespaces,
run time type identification,
more template features, and a Standard (std) C++ library.2
In addition to adding material covering features added to C++ in the interim,
Stroustrup rewrote much of the convoluted material from the second edition,
and it is now much easier to read linearly. As a consequence
of this (as jprockwell mentioned), the details of a feature may be
scattered through various parts of the book, as to not give too much
detail all at once, and focus on the basic stuff first.
All three editions strive to cover portable features of C++ that are well
implemented in all compilers of the edition's time. However, Stroustrup
admits2 that some compilers do not fully implement
some of the newer features in the C++ standard.
In the third edition, for instance,
he hints at problems with template linkage, especially with respect
to the export keyword, which might require a smart linker that can
re-invoke the compiler to create missing template instantiations.
(Workaround: explicit instantiations)
There is an appendix that suggests workarounds
for incomplete implementations, as well as problems to expect when
porting legacy C and C++ to newer compilers and newer language features. Throughout the book,
Stroustrup takes every opportunity available to offer advise, tips, and
suggestions. The third edition especially has entire
sections and even whole chapters devoted just to programming style and methodology.
1 preface to the second edition
2 chapter 1, third edition