C++ Gotchas: Avoiding Common Problems in Coding and Design / Edition 1

Paperback (Print)
Used and New from Other Sellers
Used and New from Other Sellers
from $5.26
Usually ships in 1-2 business days
(Save 89%)
Other sellers (Paperback)
  • All (13) from $5.26   
  • New (4) from $37.06   
  • Used (9) from $5.26   
Close
Sort by
Page 1 of 1
Showing All
Note: Marketplace items are not eligible for any BN.com coupons and promotions
$37.06
Seller since 2008

Feedback rating:

(17198)

Condition:

New — never opened or used in original packaging.

Like New — packaging may have been opened. A "Like New" item is suitable to give as a gift.

Very Good — may have minor signs of wear on packaging but item works perfectly and has no damage.

Good — item is in good condition but packaging may have signs of shelf wear/aging or torn packaging. All specific defects should be noted in the Comments section associated with each item.

Acceptable — item is in working order but may show signs of wear such as scratches or torn packaging. All specific defects should be noted in the Comments section associated with each item.

Used — An item that has been opened and may show signs of wear. All specific defects should be noted in the Comments section associated with each item.

Refurbished — A used item that has been renewed or updated and verified to be in proper working condition. Not necessarily completed by the original manufacturer.

New
Brand New, Perfect Condition, Please allow 4-14 business days for delivery. 100% Money Back Guarantee, Over 1,000,000 customers served.

Ships from: Westminster, MD

Usually ships in 1-2 business days

  • Canadian
  • International
  • Standard, 48 States
  • Standard (AK, HI)
$37.07
Seller since 2014

Feedback rating:

(29)

Condition: New
All orders ship same business day via standard shipping (USPS Media Mail) if received by 4 PM CST. We do not ship to APO/FPO addresses.

Ships from: Richardson, TX

Usually ships in 1-2 business days

  • Standard, 48 States
$39.26
Seller since 2007

Feedback rating:

(23157)

Condition: New
BRAND NEW

Ships from: Avenel, NJ

Usually ships in 1-2 business days

  • Canadian
  • International
  • Standard, 48 States
  • Standard (AK, HI)
$66.96
Seller since 2013

Feedback rating:

(2)

Condition: New
New

Ships from: San Diego, CA

Usually ships in 1-2 business days

  • Canadian
  • International
  • Standard, 48 States
  • Standard (AK, HI)
  • Express, 48 States
  • Express (AK, HI)
Page 1 of 1
Showing All
Close
Sort by

Overview

"This may well be the best C++ book I have ever read. I was surprised by the amount I learned."

--Matthew Wilson, Development Consultant, Synesis Software

C++ Gotchas is the professional programmer's guide to avoiding and correcting ninety-nine of the most common, destructive, and interesting C++ design and programming errors. It also serves as an inside look at the more subtle C++ features and programming techniques.

This book discusses basic errors present in almost all C++ code, as well as complex mistakes in syntax, preprocessing, conversions, initialization, memory and resource management, polymorphism, class design, and hierarchy design. Each error and its repercussions are explained in context, and the resolution of each problem is detailed and demonstrated.

Author Stephen Dewhurst supplies readers with idioms and design patterns that can be used to generate customized solutions for common problems. Readers will also learn more about commonly misunderstood features of C++ used in advanced programming and design. A companion Web site, located at http://www.semantics.org, includes detailed code samples from the book.

Readers will discover:

  • How to escape both common and complex traps associated with C++
  • How to produce more reusable, maintainable code
  • Advanced C++ programming techniques
  • Nuances of the C++ language

C++ Gotchas shows how to navigate through the greatest dangers in C++ programming, and gives programmers the practical know-how they need to gain expert status.

0321125185B10212002

Read More Show Less

Editorial Reviews

From Barnes & Noble
The Barnes & Noble Review
To paraphrase the novelist Leo Tolstoy, every well-written program is the same -- but bad C++ code is all different. In C++ Gotchas, Stephen Dewhurst brings together 99 of the most common ways programmers write lousy code -- and provides practical solutions.

These “gotchas” run the gamut from beginner’s mistakes (like using hard-coded “magic numbers”) to subtle issues in class and hierarchy design. Dewhurst illuminates them with clear explanations of why they’re wrong and tells you what to do instead.

For example, in a detailed chapter on memory and resource management, he explains why you shouldn’t check whether a particular memory allocation has succeeded. (Instead, use new to throw a bad_alloc exception in the event of allocation failure. That lets you encapsulate error-handling code for allocation failure, for a cleaner, more efficient design). Later in the same chapter, he explains why you should believe your compiler when it objects to pointers or references returned to local variables; why it’s all too easy to misuse the standard auto_ptr template; and much more.

You’ll find gotchas related to C++ syntax; to the preprocessor; conversions; initialization; polymorphism; even programmer psychology. After you read this book, you’ll have to find entirely new mistakes to make. Bill Camarda

Bill Camarda is a consultant, writer, and web/multimedia content developer. His 15 books include Special Edition Using Word 2000 and Upgrading & Fixing Networks For Dummies®, Second Edition.

Read More Show Less

Product Details

  • ISBN-13: 9780321125187
  • Publisher: Addison-Wesley
  • Publication date: 12/6/2002
  • Series: Addison-Wesley Professional Computing Series
  • Edition description: New Edition
  • Edition number: 1
  • Pages: 325
  • Product dimensions: 7.36 (w) x 10.46 (h) x 0.68 (d)

Meet the Author

Stephen C. Dewhurst was among the first users of C++ at Bell Labs. He has more than twenty years of experience in applying C++ to problem areas such as compiler design, securities trading, e-commerce, and embedded telecommunications. He is the author and coauthor of several books on C++ and is a member of the advisory board for The C++ Source, a contributing editor for C/C++ Users Journal, and a former columnist for C++ Report. He is also the author of two C++ compilers and numerous articles on compiler design and C++ programming techniques.

0321125185AB02022005

Read More Show Less

Read an Excerpt

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 cloudy history and a variety of definitions. For 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 inoculate the student against them and help 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 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're 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 Erich Gamma et al.'s Design Patterns. Descriptions of the Acyclic Visitor, Monostate, and Null Object patterns may be found in Robert Martin's Agile Software Development.

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 important, mentioning the application of a particular pattern serves to document not only the technique 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 mechanical level that an abstract data type implementation has been separated into an interface class and an implementation class. Additionally, we know this was done to separate strongly the interface from the implementation, so changes to the implementation won't affect users of the interface. We also know this separation entails a runtime cost, 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. Careful, accurate use of patterns and pattern terminology in design and documentation clarifies code and helps prevent gotchas from occurring.

C++ is a complex programming language, and the more complex a language, 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 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's important to emphasize 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 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 is a source of problems and a barrier to expert use of C++. These "dark corners" also make an interesting and profitable study in themselves. They are in C++ 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're 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 cover 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 set of related gotchas, along with suggestions for avoiding or correcting them. I'm not sure 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's necessary, before getting to the description of a 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 one can examine its etiology effectively without involving a similar eclectic collection of topics.

It's 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 you've experienced or that sounds interesting and follow links to related gotchas. Alternatively, you may sample the gotchas at random.

The text employs a number of devices intended to clarify the presentation. First, incorrect or inadvisable code is indicated by a gray 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, the examples as presented often won't compile without additional, supporting code. The source code for nontrivial examples is available from the author's Web site: www.semantics.org. All such code is indicated in the text by an abbreviated pathname near the code example, as in

>gotcha00/somecode.cp

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 idioms 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.

Recognition of a gotcha is analogous to a conditioned response to danger: once burned, twice shy. However, as with matches and firearms, it's 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 a means to keep your head in the face of C++ gotchas.

Stephen C. Dewhurst Carver, Massachusetts July 2002

Read More Show Less

Table of Contents

Preface.

Acknowledgments.

1. Basics.

Gotcha #1: Excessive Commenting.

Gotcha #2: Magic Numbers.

Gotcha #3: Global Variables.

Gotcha #4: Failure to Distinguish Overloading from Default Initialization.

Gotcha #5: Misunderstanding References.

Gotcha #6: Misunderstanding Const.

Gotcha #7: Ignorance of Base Language Subtleties.

Gotcha #8: Failure to Distinguish Access and Visibility.

Gotcha #9: Using Bad Language.

Gotcha #10: Ignorance of Idiom.

Gotcha #11: Unnecessary Cleverness.

Gotcha #12: Adolescent Behavior.

2. Syntax.

Gotcha #13: Array/Initializer Confusion.

Gotcha #14: Evaluation Order Indecision.

Gotcha #15: Precedence Problems.

Gotcha #16: for Statement Debacle.

Gotcha #17: Maximal Munch Problems.

Gotcha #18: Creative Declaration-Specifier Ordering.

Gotcha #19: Function/Object Ambiguity.

Gotcha #20: Migrating Type-Qualifiers.

Gotcha #21: Self Initialization.

Gotcha #22: Static and Extern Types.

Gotcha #23: Operator Function Lookup Anomaly.

Gotcha #24: Operator — Subtleties.

3. The Preprocessor.

Gotcha #25: #define Literals.

Gotcha #26: #define Pseudofunctions.

Gotcha #27: Overuse of #if.

Gotcha #28: Side Effects in Assertions.

4. Conversions.

Gotcha #29: Converting Through void *.

Gotcha #30: Slicing.

Gotcha #31: Misunderstanding Pointer-to-Const Conversion.

Gotcha #32: Misunderstanding Pointer-to-Pointer-to-Const Conversion.

Gotcha #33: Misunderstanding Pointer-to-Pointer-to-Base Conversion.

Gotcha #34: Pointer-to-MultiDimensional Array Problems.

Gotcha #35: Unchecked Downcasting.

Gotcha #36: Misusing Conversion Operators.

Gotcha #37: Unintended Constructor Conversion.

Gotcha #38: Casting Under Multiple Inheritance.

Gotcha #39: Casting Incomplete Types.

Gotcha #40: Old-Style Casts.

Gotcha #41: Static Casts.

Gotcha #42: Temporary Initialization of Formal Arguments.

Gotcha #43: Temporary Lifetime.

Gotcha #44: References and Temporaries.

Gotcha #45: Ambiguity Failure of dynamic_cast.

Gotcha #46: Misunderstanding Contravariance.

5. Initialization.

Gotcha #47: Assignment/Initialization Confusion.

Gotcha #48: Improperly Scoped Variables.

Gotcha #49: Failure to Appreciate C++'s Fixation on Copy Operations.

Gotcha #50: Bitwise Copy of Class Objects.

Gotcha #51: Confusing Initialization and Assignment in Constructors.

Gotcha #52: Inconsistent Ordering of the Member Initialization List.

Gotcha #53: Virtual Base Default Initialization.

Gotcha #54: Copy Constructor Base Initialization.

Gotcha #55: Runtime Static Initialization Order.

Gotcha #56: Direct versus Copy Initialization.

Gotcha #57: Direct Argument Initialization.

Gotcha #58: Ignorance of the Return Value Optimizations.

Gotcha #59: Initializing a Static Member in a Constructor.

6. Memory and Resource Management.

Gotcha #60: Failure to Distinguish Scalar and Array Allocation.

Gotcha #61: Checking for Allocation Failure.

Gotcha #62: Replacing Global New and Delete.

Gotcha #63: Confusing Scope and Activation of Member new and delete.

Gotcha #64: Throwing String Literals.

Gotcha #65: Improper Exception Mechanics.

Gotcha #66: Abusing Local Addresses.

Gotcha #67: Failure to Employ Resource Acquisition Is Initialization.

Gotcha #68: Improper Use of auto_ptr.

7. Polymorphism.

Gotcha #69: Type Codes.

Gotcha #70: Nonvirtual Base Class Destructor.

Gotcha #71: Hiding Nonvirtual Functions.

Gotcha #72: Making Template Methods Too Flexible.

Gotcha #73: Overloading Virtual Functions.

Gotcha #74: Virtual Functions with Default Argument Initializers.

Gotcha #75: Calling Virtual Functions in Constructors and Destructors.

Gotcha #76: Virtual Assignment.

Gotcha #77: Failure to Distinguish among Overloading, Overriding, and Hiding.

Gotcha #78: Failure to Grok Virtual Functions and Overriding.

Gotcha #79: Dominance Issues.

8. Class Design.

Gotcha #80: Get/Set Interfaces.

Gotcha #81: Const and Reference Data Members.

Gotcha #82: Not Understanding the Meaning of Const Member Functions.

Gotcha #83: Failure to Distinguish Aggregation and Acquaintance.

Gotcha #84: Improper Operator Overloading.

Gotcha #85: Precedence and Overloading.

Gotcha #86: Friend versus Member Operators.

Gotcha #87: Problems with Increment and Decrement.

Gotcha #88: Misunderstanding Templated Copy Operations.

9. Hierarchy Design.

Gotcha #89: Arrays of Class Objects.

Gotcha #90: Improper Container Substitutability.

Gotcha #91: Failure to Understand Protected Access.

Gotcha #92: Public Inheritance for Code Reuse.

Gotcha #93: Concrete Public Base Classes.

Gotcha #94: Failure to Employ Degenerate Hierarchies.

Gotcha #95: Overuse of Inheritance.

Gotcha #96: Type-Based Control Structures.

Gotcha #97: Cosmic Hierarchies.

Gotcha #98: Asking Personal Questions of an Object.

Gotcha #99: Capability Queries.

Bibliography.

Index. 0321125185T11072002

Read More Show Less

Preface

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 cloudy history and a variety of definitions. For 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 inoculate the student against them and help 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 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're 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 Erich Gamma et al.'s Design Patterns. Descriptions of the Acyclic Visitor, Monostate, and Null Object patterns may be found in Robert Martin's Agile Software Development.

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 important, mentioning the application of a particular pattern serves to document not only the technique 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 mechanical level that an abstract data type implementation has been separated into an interface class and an implementation class. Additionally, we know this was done to separate strongly the interface from the implementation, so changes to the implementation won't affect users of the interface. We also know this separation entails a runtime cost, 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. Careful, accurate use of patterns and pattern terminology in design and documentation clarifies code and helps prevent gotchas from occurring.

C++ is a complex programming language, and the more complex a language, 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 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's important to emphasize 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 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 is a source of problems and a barrier to expert use of C++. These "dark corners" also make an interesting and profitable study in themselves. They are in C++ 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're 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 cover 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 set of related gotchas, along with suggestions for avoiding or correcting them. I'm not sure 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's necessary, before getting to the description of a 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 one can examine its etiology effectively without involving a similar eclectic collection of topics.

It's 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 you've experienced or that sounds interesting and follow links to related gotchas. Alternatively, you may sample the gotchas at random.

The text employs a number of devices intended to clarify the presentation. First, incorrect or inadvisable code is indicated by a gray 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, the examples as presented often won't compile without additional, supporting code. The source code for nontrivial examples is available from the author's Web site: www.semantics.org. All such code is indicated in the text by an abbreviated pathname near the code example, as in >>gotcha00/somecode.cp

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 idioms 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.

Recognition of a gotcha is analogous to a conditioned response to danger: once burned, twice shy. However, as with matches and firearms, it's 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 a means to keep your head in the face of C++ gotchas.

Stephen C. Dewhurst Carver, Massachusetts July 2002

0321125185P11072002

Read More Show Less

Customer Reviews

Be the first to write a review
( 0 )
Rating Distribution

5 Star

(0)

4 Star

(0)

3 Star

(0)

2 Star

(0)

1 Star

(0)

Your Rating:

Your Name: Create a Pen Name or

Barnes & Noble.com Review Rules

Our reader reviews allow you to share your comments on titles you liked, or didn't, with others. By submitting an online review, you are representing to Barnes & Noble.com that all information contained in your review is original and accurate in all respects, and that the submission of such content by you and the posting of such content by Barnes & Noble.com does not and will not violate the rights of any third party. Please follow the rules below to help ensure that your review can be posted.

Reviews by Our Customers Under the Age of 13

We highly value and respect everyone's opinion concerning the titles we offer. However, we cannot allow persons under the age of 13 to have accounts at BN.com or to post customer reviews. Please see our Terms of Use for more details.

What to exclude from your review:

Please do not write about reviews, commentary, or information posted on the product page. If you see any errors in the information on the product page, please send us an email.

Reviews should not contain any of the following:

  • - HTML tags, profanity, obscenities, vulgarities, or comments that defame anyone
  • - Time-sensitive information such as tour dates, signings, lectures, etc.
  • - Single-word reviews. Other people will read your review to discover why you liked or didn't like the title. Be descriptive.
  • - Comments focusing on the author or that may ruin the ending for others
  • - Phone numbers, addresses, URLs
  • - Pricing and availability information or alternative ordering information
  • - Advertisements or commercial solicitation

Reminder:

  • - By submitting a review, you grant to Barnes & Noble.com and its sublicensees the royalty-free, perpetual, irrevocable right and license to use the review in accordance with the Barnes & Noble.com Terms of Use.
  • - Barnes & Noble.com reserves the right not to post any review -- particularly those that do not follow the terms and conditions of these Rules. Barnes & Noble.com also reserves the right to remove any review at any time without notice.
  • - See Terms of Use for other conditions and disclaimers.
Search for Products You'd Like to Recommend

Recommend other products that relate to your review. Just search for them below and share!

Create a Pen Name

Your Pen Name is your unique identity on BN.com. It will appear on the reviews you write and other website activities. Your Pen Name cannot be edited, changed or deleted once submitted.

 
Your Pen Name can be any combination of alphanumeric characters (plus - and _), and must be at least two characters long.

Continue Anonymously

    If you find inappropriate content, please report it to Barnes & Noble
    Why is this product inappropriate?
    Comments (optional)