作者:empty 页数:443 出版社:empty |
Continue to AcknowledgmentsThis book is a direct outgrowth of my experiences teaching C++to professional programmers.Tv e found thatmost students, after a week of intensive instruction, feel comfortable with the basic constructs of the language,but they tend to be less san gui nc about their ability to put the constructs to gct her in an effective manner.Thusbegan my attempt to formulate short, specific, easy-to-remember guidelines for effective software developmentinC+:a summary of the things experienced C++programmers almost always door almost always avoid
I was originally interested in rules that could been forced by some kind of lint-like program.To that end, I ledresearch into the development of tools to examine C++sourcecode for violations of user-specified conditions . 1Unfortunately, the research ended before a complete prototype could be developed.Fortunately, severalcommercial C++-checking products are now available.(You'll find an overview of such products in the articleon static analysis tools by me and Martin Klaus.)Though my initial interest was in programming rules that could be automatically enforced, I soon realized thelimitations of that approach.The majority of guidelines used by good C++programmers are too dit ficult toformalize or have too many important exceptions to be blindly enforced by a program.I was thus led to thenotion of something less precise than a computer program, but still more focused and to-the-point than a generalC++textbook.The result you now hold in your hands:a book containing 50specificsuggcstionson howtoimprove your C++programs and designs.In this book, you'Il find advice on what you should do, and why, and what you should not do, and why notFundamentally, of course, the whys are more important than the whats, but its alot more convenient to refer to alist of guidelines than to memorize a textbook or two.Unlike most books on C++, my presentation here is not organized around pari cular language features.That is, Idon't talkabout constructors in one place, about virtual functions in another, about inheritance in a third, etc.Instead, each discussion in the book is tailored to the guideline it accompanies, and my coverage of the variousaspects of a particular language feature maybe dispersed throughout the book.The advantage of this approach is that it better reflects the complexity of the software systems for which C++isoften chosen, systems in which understanding individual language features is not enough.For example,experienced C++developers know that understanding inline functions and understanding virtual destructors doesnot necessarily m can you understand inline virtual destructors.Such bat le-scarred developers recognize thatcomprehending the interactions between the features inC++is of the greatest possible importance in using thelanguage effectively.The organization of this book reflects that fundamental truth.The disadvantage of this design is that you may have to lookin more than one place to find everything I have tosay about a particular C++construct.To minimize the inconvenience of this approach, I have sprinkledcross-references liberally throughout the text, and a comprehensive index is provided at the end of the book.In preparing this second edition, my ambition to improve the book has been tempered by fear.Tens of thousandsof programmers embraced the first edition of Effective C++, and I didn't want to destroy whatevercharacteristics attracted them to it.However, in the six years since I wrote the book, C++has changed, the C++library has changed(see Item 49) , my understanding of C++has changed, and accepted usa gc of C++haschanged.That'sa lot of change, and it was important to me that the technical material inEffective C++berevised to reflect those changes.Tdd one what I could by updating individual pages between printings, but booksand software are frighteningly similar?there comes a time when localized enhancements fail to suffice, and theonly recours cisa system-wi dc rewrite.Thisbookistheresultofthatrewrite:EffectiveC++, Version 2.0.Those familiar with the first edit on maybe interested to know that every Item in the book has been reworked.Ibelieve the overall structure of the book remains sound, however, so little there has changed.Of the 50 originalItems, I retained 48, though I tinkered with the wording of a few Item titles(in addition to revising theaccompanying discussions) .The retired Items(i.c., those replaced with completely new material) are numbers32 and 49, though much of the information that used to be in Item 32 somehow found its way into the revamped
Item l.I swapped the order of Items 41 and 42, because that made it easier to present the revised material theycontain.Finally, I reversed the direction of my inheritance arrows.They now follow the almost-universalconvention of pointing from derived classes to base classes.This is the same convention I followed in my 1996book, More Effective C++,The set of guidelines in this book is far from exhaustive, but coming up with good rules?ones that areapplicable to almost all applications almost all the time?is harder than it looks.Perhaps you know ofadditional guidelines, of more ways in which to program effectively inC++.If so, I would be delighted to hearabout them.On the other hand, you may feel that some of the Items in this book are inappropriate as general advice; that thereis a better way to accomplish a task examined in the book, or that one or more of the technical discussions isunclear, incomplete, or misleading.I encourage you to let me know about these things, too.Donald Knuth has along history of offering a small reward to people who notify him of errors in his books, Thequest for a perfect book is laudable in any case, but in view of the number of bug-ridden C++books that havebeen rushed to market, I feel especially strongly compelled to follow Knuth's example.Therefore, for each errorin this book that is reported to me?be it technical, grammatical, typographical, or otherwise?I will, in futureprintings, gladly add to the acknowledgments the name of the first person to bring that error to my attention,Send your suggested guidelines, your comments.your criticisms, and?sigh?your bugreports to:Scott Meyers c/o Publisher, Corporate and Professional Publishing Addison Wesley Longman, Inc.1JacWayReading.MA01867U.S.A.Alternatively, you may send electronic mailto cc++@awl.com.I maintain a list of changes to this book since its first printing, including bug-fixes, clarifications, and technicalupdates.This list is available at the E flect i yeC++WorldWide Website.If you would like a copy of this list,but you lack access to the WorldWide Web, please send a request to one of the addresses above, and I will seethat the list is sent to you.