Notes by Francis Glassborow in the September and October 1997 issues of .EXE Magazine:

Must Buy:

I am often asked 'How many C++ programmers are there?' I will soon have a way to answer that question. The third edition of 'The C++ Programming Language' by Bjarne Stroustrup has just been published. It took the author and twelve technical reviewers three years. It is a complete rewrite and any serious C++ programmer will want to read it (more than once). The author insisted on a fair currency conversion for European sale. It is the best ukp27-50 you will spend this year.

(and in the October issue):

In my last column I reported very briefly on the publication of "The C++ Programming Language, 3rd edition" (ISBN 0 201 88954 4) and exhorted you to read it. Let me expand a little further. The three editions of this book represent three key stages in the development of C++. In the first edition (closely modelled on K&R) the C++ is substantially C with a number of interesting extensions. The book clearly addresses C programmers who are looking for support for a higher level of abstraction. This phase of the development of C++ is the one typified by the description 'A Better C'. I do not want to get into an argument about that description because whether you find C++ better or worse than C largely depends on what you are using it for. The second edition of C++PL represents a stage when C++ was metamorphosing from 'almost C with extras' to a full fledged free standing language. At that stage (1991) C++ was rapidly becoming popular (not, thank goodness, as explosively as Java in 1996) but it was still clearly being regarded as a dialect of C. The natural route to C++ proficiency lay through a C style apprenticeship. A major problem with this was that the newcomer was faced with all the complexity of C (doing good work with minimalist tools requires skill and understanding) and then all the added complexity of C++ under development. To make matters worse, many writing about C++ had only half digested the implications of both the actual and proposed extensions. While I am sure that Bjarne Stroustrup had a clear vision of where he was going, much of the middle ground was still only part-formed from primeval chaos.

In the intervening six years a great deal has been happening. C++ has matured into an independent language which should be learnt in its own right. New, and powerful, idioms have been developed. The experts have refined their view of what is appropriate. We now have an excellent vehicle for a wide range of people from students taking their first tentative steps at programming to distributed teams developing large scale products.

The third edition presents a much cleaner introduction to modern C++. I think that many would be less keen to jump into the cauldron of Java if their first introduction to C++ had been to the language Bjarne Stroustrup presents here. This book is the product of many years spent listening to the ideas and fears of others by someone who is willing to change. As a single example consider the problem of whether a parameter should be by-value, a pointer type or by-reference. Bjarne Stroustrup is now quite clear and explicit. Small objects can usually be passed by value, larger ones by const & (i.e. the semantics of value but without the overhead of copying). He now recommends that you use a pointer rather than a reference for a parameter where the state of the original argument is subject to change by the function. Note that he is writing about declared parameters not the implicit 'this' parameter used by a member function, that has always been a pointer.