Join Amazon Prime and ship Two-Day for free and Overnight for $3.99. Already a member? Sign in.

 

or
Sign in to turn on 1-Click ordering.
 
 
More Buying Choices
41 used & new from $16.50

Have one to sell? Sell yours here
 
   
C++ Gotchas: Avoiding Common Problems in Coding and Design (Addison-Wesley Professional Computing Series)
 
 
Tell the Publisher!
I’d like to read this book on Kindle

Don’t have a Kindle? Get yours here.
 
  

C++ Gotchas: Avoiding Common Problems in Coding and Design (Addison-Wesley Professional Computing Series) (Paperback)

by Stephen C. Dewhurst (Author)
3.9 out of 5 stars See all reviews (15 customer reviews)

List Price: $49.99
Price: $40.45 & this item ships for FREE with Super Saver Shipping. Details
You Save: $9.54 (19%)
o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o o
In Stock.
Ships from and sold by Amazon.com. Gift-wrap available.

Only 3 left in stock--order soon (more on the way).

Want it delivered Friday, July 17? Choose One-Day Shipping at checkout. Details
23 new from $23.95 18 used from $16.50

Frequently Bought Together

C++ Gotchas: Avoiding Common Problems in Coding and Design (Addison-Wesley Professional Computing Series) + Effective C++: 55 Specific Ways to Improve Your Programs and Designs (3rd Edition) (Addison-Wesley Professional Computing Series) + More Effective C++: 35 New Ways to Improve Your Programs and Designs (Addison-Wesley Professional Computing Series)
Price For All Three: $122.23

Show availability and shipping details


Customers Who Bought This Item Also Bought

C++ Common Knowledge: Essential Intermediate Programming

C++ Common Knowledge: Essential Intermediate Programming

by Stephen C. Dewhurst
4.6 out of 5 stars (17)  $29.27
C++ Coding Standards: 101 Rules, Guidelines, and Best Practices (C++ In-Depth Series)

C++ Coding Standards: 101 Rules, Guidelines, and Best Practices (C++ In-Depth Series)

by Herb Sutter
4.3 out of 5 stars (27)  $40.45
More Effective C++: 35 New Ways to Improve Your Programs and Designs (Addison-Wesley Professional Computing Series)

More Effective C++: 35 New Ways to Improve Your Programs and Designs (Addison-Wesley Professional Computing Series)

by Scott Meyers
4.4 out of 5 stars (39)  $40.98
Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library (Addison-Wesley Professional Computing Series)

Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library (Addison-Wesley Professional Computing Series)

by Scott Meyers
4.5 out of 5 stars (36)  $40.93
Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions (C++ In-Depth Series)

Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions (C++ In-Depth Series)

by Herb Sutter
4.7 out of 5 stars (35)  $42.70
Explore similar items

Editorial Reviews

Product Description
The professional programmer's guide to avoiding and correcting ninety-nine of the most common, destructive, and interesting C++ design and programming errors. Serves as an inside look at the more subtle C++ features and programming techniques. Softcover.

From the Inside Flap
This book is the result of nearly two decades of minor frustrations, serious bugs, late nights, and weekends spent involuntarily at the keyboard. This collection consists of 99 of some of the more common, severe, or interesting C++ gotchas, most of which I have (I'm sorry to say) experienced personally.The term "gotcha" has a rather cloudy history, and a variety of definitions. For the purposes of this book, we'll define C++ gotchas as common and preventable problems in C++ programming and design. The gotchas described here run the gamut from minor syntactic annoyances to basic design flaws to full-blown sociopathic behavior. Almost ten years ago, I started including notes about individual gotchas in my C++ course material. My feeling was that pointing out these common misconceptions and misapplications in apposition to correct use would have the effect of inoculating the student against them, and help to prevent new generations of C++ programmers from repeating the gotchas of the past. By and large, the approach worked, and I was induced to collect sets of related gotchas together for presentation at conferences. These presentations proved to be popular (misery loves company?) and I was encouraged to write a "gotcha" book.Any discussion of avoiding or recovering from C++ gotchas involves other subjects, most commonly design patterns, idioms, and technical details of C++ language features.This is not a book about design patterns, but we often find ourselves referring to patterns as a means of avoiding or recovering from a particular gotcha. Conventionally, the pattern name is capitalized, as in "Template Method" pattern or "Bridge" pattern. When we mention a pattern, we describe its mechanics briefly if they are simple, but delegate detailed discussion of patterns to works devoted to them. Unless otherwise noted, a fuller description of a pattern, as well as a richer discussion of patterns in general, may be found in Design Patterns. Descriptions of the Acyclic Visitor, Monostate, and Null Object patterns may be found in Agile Software Development (see the bibliography).From the perspective of gotchas, design patterns have two important properties. First, they describe proven, successful design techniques that can be customized in a context-dependent way to new design situations. Second, and perhaps more importantly, mentioning the application of a particular pattern serves to document not only the technique that is applied, but also the reasons for its application and the effect of having applied it. For example, when we see that the Bridge pattern has been applied to a design, we know at a simple mechanical level that an abstract data type implementation has been separated into an interface class and an implementation class. Additionally, we know that the reason this was done was to separate strongly the interface from the implementation, so that changes to the implementation will not affect users of the interface. We also know that there is a runtime cost for this separation, how the source code for the abstract data type should be arranged, and many other details. A pattern name is an efficient, unambiguous handle to a wealth of information and experience about a technique, and careful, accurate use of patterns and pattern terminology in design and documentation clarify code and help to prevent gotchas from occurring.C++ is a complex programming language, and the more complex a language is, the more important is the use of idiom in programming. For a programming language, an idiom is a commonly used and generally understood combination of lower-level language features that produces a higher-level construct, in much the same way that patterns do at higher levels of design. Therefore, in C++ we can discuss copy operations, function objects, smart pointers, and throwing an exception without having to specify these concepts at their lowest level of implementation. It is important to note that an idiom is not only a common combination of language features, but also a common set of expectations about how these combined features should behave. What do copy operations mean? What can we expect to happen when an exception is thrown? Much of the advice found in this book involves being aware of and employing idioms in C++ coding and design. Many of the gotchas listed here could be described simply as departing from a particular C++ idiom, and the accompanying solution to the problem could often be described simply as following the appropriate idiom (see Gotcha #10).A significant portion of this book is spent in describing the nuances of certain areas of the C++ language that are commonly misunderstood and frequently lead to gotchas. While some of this material may have an esoteric feel to it, unfamiliarity with these areas of the language is a source of problems and a barrier to expert use of C++. These "dark corners" of the language also make an interesting and profitable study in themselves. They are in the C++ language for a reason, and expert C++ programmers often find use for them in advanced programming and design.Another area of connection between gotchas and design patterns is the similar importance of describing relatively simple instances. Simple patterns are important. In some respects, they may be more important than technically difficult patterns because they are likely to be more commonly employed. The benefits obtained from the pattern description will, therefore, be leveraged over a larger body of code and design. In much the same way, the gotchas described in this book range over a wide range of difficulty, from a simple exhortation to act like a responsible professional (Gotcha #12) to warnings to avoid misunderstanding the dominance rule under virtual inheritance (Gotcha #79). But, as in the analogous case with patterns, acting responsibly is probably more commonly applicable on a day-to-day basis than is the dominance rule.Two common themes run through the presentation. The first is the overriding importance of convention. This is especially important in a complex language like C++. Adherence to established convention allows us to communicate efficiently and accurately with others. The second theme is the recognition that others will maintain the code we write. The maintenance may be direct, so that our code must be readily and generally understood by competent maintainers; or it may be indirect, in which case we must ensure that our code remains correct even as its behavior is modified by remote changes.The gotchas in this book are presented as a collection of short essays, each of which describes a gotcha, or a set of related gotchas, along with suggestions for avoiding or correcting them. I'm not sure that any book about gotchas can be entirely cohesive, due to the anarchistic nature of the subject. However, the gotchas are grouped into chapters according to their general nature or area of (mis)applicability. Additionally, discussion of one gotcha inevitably touches on others. Where it makes sense to do so--and it generally does--I've made these links explicit. Cohesion within each item is sometimes at risk as well. Often it is necessary, before getting to the description of a particular gotcha, to describe the context in which it appears. That description, in turn, may require discussion of a technique, idiom, pattern, or language nuance that may lead us even further afield before we return to the advertised gotcha. I've tried to keep this meandering to a minimum, but it would have been dishonest, I think, to attempt to avoid it entirely. Effective programming in C++ involves intelligent coordination of so many disparate areas, that it's impractical to imagine that one can examine its etiology effectively without involving a similar eclectic collection of topics.It is certainly not necessary--and possibly inadvisable--to read this book straight through from Gotcha #1 to Gotcha #99. Such a concentrated dose of mayhem may put you off programming in C++ altogether. A better approach may be to start with a gotcha that you have experienced or with one that sounds interesting, and follow links to related gotchas. Alternatively, you may sample the gotchas at random.The text employs a number of devices that are intended to clarify the presentation. First, incorrect or inadvisable code is indicated by a grey background, whereas correct and proper code is presented with no background. Second, code that appears in the text has been edited for brevity and clarity. As a result, it is often the case that the examples, as presented, will not compile without additional, supporting code. The source code for non-trivial examples is available from the author's web site: semantics. All such code is indicated in the text by an abbreviated pathname appearing near the code example, as in gotcha00/somecode.cpp.Finally, a warning: The one thing you should not do with gotchas is elevate them to the same status as idioms or patterns. One of the signs that you're using patterns and idiom properly is that the pattern or idiom appropriate to the design or coding context will arise "spontaneously" from your subconscious just when you need it. However, you do not want to encourage a similar spontaneous recall of gotchas, since you're interested in how to produce an effective design or correct code, not how to produce a failed design and buggy code. Rather, learning to recognize a gotcha is analogous to a conditioned response to danger: once burned, twice shy. The recollection of the appropriate gotcha is triggered by its presence; it is not considered and rejected a priori. However, as with matches and firearms, it is not necessary to suffer a burn or a gunshot wound to the head personally to learn how to recognize and avoid a dangerous situation; generally all that's necessary is advance warning. Consider this collection as a means to keep your head in the face of C++ gotchas.Stephen C. DewhurstCarver, MassachusettsJuly 2002 0321125185P07192002


See all Editorial Reviews

Product Details

  • Paperback: 352 pages
  • Publisher: Addison-Wesley Professional (December 6, 2002)
  • Language: English
  • ISBN-10: 0321125185
  • ISBN-13: 978-0321125187
  • Product Dimensions: 9.2 x 7.3 x 0.9 inches
  • Shipping Weight: 1.3 pounds (View shipping rates and policies)
  • Average Customer Review: 3.9 out of 5 stars See all reviews (15 customer reviews)
  • Amazon.com Sales Rank: #548,483 in Books (See Bestsellers in Books)

Look Inside This Book


Tags Customers Associate with This Product

 (What's this?)
Click on a tag to find related items, discussions, and people.
Check the boxes next to the tags you consider relevant or enter your own tags in the field below.
(1)
(1)

Your tags: Add your first tag
 
Help others find this product — tag it for Amazon search
No one has tagged this product for Amazon search yet. Why not be the first to suggest a search for which it should appear?

Sell a Digital Version of This Book in the Kindle Store

If you are a publisher or author and hold the digital rights to a book, you can sell a digital version of it in our Kindle Store. Learn more

 

Customer Reviews

15 Reviews
5 star:
 (7)
4 star:
 (4)
3 star:
 (1)
2 star:
 (1)
1 star:
 (2)
 
 
 
 
 
Average Customer Review
3.9 out of 5 stars (15 customer reviews)
 
 
 
 
Share your thoughts with other customers:
Most Helpful Customer Reviews

 
29 of 33 people found the following review helpful:
4.0 out of 5 stars Ignore the reviewer from Sweden, January 31, 2003
By A Customer
Having been in software development for many years, the last twelve using C++, I can say from experience that the author has assembled an accurate collection of problems I encounter over and over again. I have worked with legacy source code from Microsoft, Adobe Systems and other lesser known software companies that have some of the problems described in this book. These instances are not an indication of incompetence on the part of the original programmers, but rather a reflection of the realities of the business: deadlines need to be met and rarely do we have the time fiddle with code to make it into picture perfect C++. And if it works properly as it is, then don't fix something that is not broken.

Beginning C++ programmers will get a lot out of this book. This is especially true if you are migrating from C and need to break a few bad habits. Experienced C++ developers will not get that much out of it, but the author has many interesting points that are worth checking out.

The reviewer from Sweden is either an academic pinhead who has never participated in a large commercial software development effort that someone would actually want to pay money for, or he / she / it stopped reading the book after the first three or four sections.

To sum this book up: If you DON'T need to ask yourself the questions the author addresses in this book, then you are not doing any serious C++ software development!

Comment Comment | Permalink | Was this review helpful to you? Yes No (Report this)



 
19 of 22 people found the following review helpful:
5.0 out of 5 stars A must read, February 18, 2003
By uniq "uniq" (El Dorado Hills, CA United States) - See all my reviews
  
This is a wonderful book. Not a usual list of trivial advices and recipes, but a collection of serious considerations on how to write code that will survive years of maintenance.

I haven't come to this conclusion right away. At first, I was a bit irritated by what I had thought were the author's biases and self-confidence, but as I kept reading, I began appreciating and even enjoying his candid and confident style that communicated strong experience of dealing with the issues. Not since the time when the ARM ("The Annotated C++ Reference Manual" by Margaret A. Ellis and Bjarne Stroustrup) and Stroustrup's "The C++ Programming Language" were published years ago have I read a C++ book that impressed me as much! If Stroustrup's books focus on the description of C++ facilities, this book concentrates on its programming practice.The author's knowledge of the C++ standard and the compiler mechanics makes his arguments very compelling.

Although anybody familiar with C++ will benefit from this book since it covers a wide range of C++ features, as well as programming and support issues, the book should appeal most of all to the mature audience: one has to be mature to understand the value in developing a program that will sustain years of maintenance by others rather than the one that will only run most of the time without crashing.

Comment Comment | Permalink | Was this review helpful to you? Yes No (Report this)



 
5 of 5 people found the following review helpful:
2.0 out of 5 stars Gotcha #11: Unnecessary Cleverness, July 20, 2007
I forced myself through the first chapter (first 12 Gotchas) and decided that I'd rather spend my time somewhere else.

First, many practices preached in this book are questionable. Quoted from the book: "I've received strong, negative, and sometimes abusive reactions to my use of every one of the constructs above." (Gotcha #7).

The author is against himself all the time - best described in his own words. In Gotcha #11: "Unnecessary cleverness is a common problem with C++ programmers. Remember that it's nearly always preferable to be conventional, clear, and slightly less efficient than unnecessarily clever, unclear, and unmaintainable." In Gotcha #12: "We programmers are good at dispensing advice but often have a hard time following it."

The editorial (or organizing?) quality is not superior either. For example, Gotcha #8's title "Failure to Distinguish Access and Visibility" doesn't describe what is discussed in that section.

The author's arrogant and condescending attitude doesn't make the reading very pleasant.

The reason I gave two instead of one star is that the author is obviously very knowledgeable in C++ language. This is NOT one of those useless garbage books. You do have a chance to pick up some tricks here and there. But if you're busy and still want to learn something valuable as quick as you can, I suggest read or just re-read Stroustrup, or try Meyers's Effective C++.
Comment Comment | Permalink | Was this review helpful to you? Yes No (Report this)


Share your thoughts with other customers: Create your own review
 
 
 
Most Recent Customer Reviews

1.0 out of 5 stars It was like poking my eye with a stick...
This is a rather unprofessional and poorly organized tome. The author is arrogant and condescending and seems to perceive his reader as an idiot. Read more
Published 5 months ago by Rich Wardwell

5.0 out of 5 stars Mandatory
This book, along with Dewhurst's other one, C++ Common Knowledge: Essential Intermediate Programming should be mandatory reading for C++ programmers. Read more
Published 20 months ago by Joe King

4.0 out of 5 stars solid C++ advice, dispensed in an amusingly grumpy fashion
There are unlikely to be many other C++ books where the word 'ignoramus' appears as often. Dewhurst's writing definitely has character. Read more
Published on February 22, 2007 by Thing with a hook

5.0 out of 5 stars Better than Exceptional and effective
I prefer C++ gotchas to the C++ exceptional and effective series. Why? Because this book is much simpler. If you're a Hacker (? Read more
Published on December 17, 2005 by Marc Magrans De Abril

5.0 out of 5 stars Lots of little glimpses behind the scenes
This book works by living up to its title and showing distinct problem areas with C++, highlighting the wary and unwary, experienced and inexperienced, alike. Read more
Published on June 21, 2005 by Cookie Raver

5.0 out of 5 stars Very accessible
I'm a big fan of books that make the topic(s) accessible to readers. This book does a good job of that. Read more
Published on March 14, 2005 by Kevin J. Schmidt

5.0 out of 5 stars Save yourself some C++ pain
If you can learn from other peoples mistakes then this book will save you a lot of pain. C++ is one of those languages that can dish out the pain if you don't understand what it's... Read more
Published on April 27, 2004 by Jack D. Herrington

4.0 out of 5 stars Very good, but not great
Overall, it's a good book worth reading, but it's not as great as Scott Meyers' two Effective C++ volumes. Read more
Published on March 14, 2004 by alkmaar

5.0 out of 5 stars Better than Meyers
I'm sure most of you have heard about, skimmed through, or read Scott Meyers 50 or 35 tips on C++ and if you thought those were good books then I'm sure you'll find that this book... Read more
Published on December 21, 2003 by An Pham

3.0 out of 5 stars Somewhat Uninspiring
There's little in the problems identified by this book or in the solutions suggested that I would disagree with. Read more
Published on August 14, 2003 by microtherion

Only search this product's reviews



Customer Discussions

 Beta (What's this?)
New! See all customer communities, and bookmark your communities to keep track of them.
This product's forum (0 discussions)
  Discussion Replies Latest Post
  No discussions yet

Ask questions, Share opinions, Gain insight
Start a new discussion
Topic:
First post:
Prompts for sign-in
  [Cancel]


Active discussions in related forums
  Discussion Replies Latest Post
C# or Java? 32 9 days ago
   


Product Information from the Amapedia Community

Beta (What's this?)



Look for Similar Items by Category


Bath Wonders from LUSH

LUSH bath bombs
Find bath bombs, bath melts, shower jellies, and more great gifts for yourself (or a friend!) from LUSH Fresh Handmade Cosmetics.

Shop LUSH now

 

Best Books of 2008

Best of 2008
Find our top 100 editors' picks as well as customers' favorites in dozens of categories in our Best Books of 2008 Store.
 

Get Off the Ground

Shop for miter saw stands
Lift your miter saw off the ground with a miter saw stand and increase in-feed and out-feed support for optimal performance.

Shop for miter saw stands

 

Best Books

Best of the Month
See our editors' picks and more of the best new books on our Best of the Month page.
 

 

Feedback

If you need help or have a question for Customer Service, contact us.
 Would you like to update product info or give feedback on images?
Is there any other feedback you would like to provide?

Your comments can help make our site better for everyone.


Where's My Stuff?

Shipping & Returns

Need Help?

Your Recent History

  (What's this?)
You have no recently viewed items or searches.

After viewing product detail pages or search results, look here to find an easy way to navigate back to pages you are interested in.

Look to the right column to find helpful suggestions for your shopping session.

Continue shopping: Top Sellers
Free
Free by Chris Anderson
Paranoia
Paranoia by Joseph Finder
My Soul to Lose
My Soul to Lose by Rachel Vincent
Glenn Beck's Common Sense

Conditions of Use | Privacy Notice © 1996-2009, Amazon.com, Inc. or its affiliates