C++ Strategies and Tactics
In the hands of an expert, C++ helps designers and programmers build systems that are modular, maintainable, and fast.  To the novice, however, the size of the language can be intimidating.  There are a lot of features in C++ and it takes some experience to learn which ones are appropriate for any situation.This book is intended to enhance and expedite that learning process. Most successful C++ programmers cannot recite chapter and verse from the language rules; instead, they have acquired a set of idioms and techniques that have worked well for them.  Our goal is to help the C++ novice learn those idioms that have been most useful in practice.  We also point out some of the most common pitfalls.We do not try to cover the entire language and we leave the ultra-precise definitions of language semantics to the reference manuals.  Instead, we concentrate on helping the reader build programs that can be understood by someone who is not a C++ language lawyer.  We not only discuss techniques for making programs elegant and fast; we also show how to make them easier to understand and maintain.Acknowledgements Almost none of the ideas and programming idioms in this book are my invention.  My goal has been to present, in a way that allows novice C++ programmers to learn them quickly, what I consider to be the most important strategies and tactics I have learned from others in the eight years I have been using C++.  Some of these lessons were learned by studying actual development projects as they moved from C to C++; others came from discussions with talented individuals.Many of the best ideas on templates and library design, including the ideas behind many of the container classes in this book, came from classes in the USL Standard Components that were originally designed by Martin Carroll, Andrew Koenig, and Jonathan Shopiro.  I claim exclusive ownership of any errors in my versions.  Andrew Koenig was a valuable resource as the local C++ language lawyer.  The participants in the "C++ Strategies and Tactics" seminars I presented at several conferences helped inspire this book and refine its ideas.  Other important ideas came from Tom Cargill, John Carolan, Jim Coplien, Mark Linton, Gerald Schwarz, and of course Bjarne Stroustrup, who also invented the C++ programming language that made the book possible in the first place.Brian Kernighan read several drafts of this book, and his excellent feedback has been a lot of help.  I would also like to thank David Annatone, Steve Buroff, Tom Cargill, Bill Hopkins, Cay Horstman, Lorraine Juhl, Peter Juhl, Stan Lippman, Dennis Mancl, Scott Meyers, Barbara Moo, Lorraine Weisbrot Murray, Bjarne Stroustrup, Clovis Tondo, Steve Vinoski, and Christopher Van Wyk for their comments on early drafts of this book.  Lorraine Weisbrot Murray also contributed the encouragement, understanding, support, and love that helped make the entire effort feasible.Rob Murray0201563827P04062001