MORE EXCEPTIONAL C++
Ouvrage 9780201704341 : MORE EXCEPTIONAL C++
Organized in a practical problem-and-solution format, More Exceptional
C++ picks up where the widely acclaimed Exceptional C++ leaves off,
providing successful strategies for solving real-world problems in C++.
Drawing from years of in-the-trenches experience, Herb Sutter provides
tested techniques and practical solutions for programmers designing
modern software systems with C++, from small projects to enterprise
applications.
Built around forty programming puzzles, More Exceptional C++ helps you
understand the rules and issues critical to successful software design
and development in C++. New themes included in this sequel place a
strong emphasis on generic programming, memory management, and using the
C++ standard library, including coverage of important techniques like
traits and predicates. Also included are guidelines and considerations
to remember when using standard containers and algorithms_topics rarely
covered in-depth in other sources.
Readers will find solutions to such important questions as:
* What pitfalls might you encounter when using std::map and
std::set, and how can you safely avoid them?
* What kinds of predicates are safe to use with the STL, what kinds
aren't, and why?
* What techniques are available for writing powerful generic
template code that can change its own behavior based on the types it's
given to work with?
* When and how should you optimize your code? Why can (and do) fancy
optimizations get us into trouble? And how can some of these answers
change if you're writing multithread-safe code?
* Does exception safety affect classdesign, or can it be retrofitted
in as an afterthought?
* How can you avoid the Siamese Twin problem when combining
inheritance-based libraries from different vendors?
* How can you safely use auto_ptr, and then use common design
patterns to adapt it to avoid common pitfalls? Can you use auto_ptr as a
class member? What must you know before you elect to use it that way?
* Plus one of the most frequently recurring questions about modern
C++: When and how should you use namespaces, anyway?
A must-have for the serious programmer, More Exceptional C++ promotes
the practical and pragmatic understanding of the language while showing
you how to write exceptional code in C++
Preface
The famous Greek philosopher Socrates taught by asking his students
questions_questions designed to guide them, to help them draw
conclusions from what they already knew, and to show them how the new
things they were learning related to each other and to their existing
knowledge. This method has becomeso famous that we now call it the
"socratic method" in his honor. As students, Socrates' approach involves
us, it makes us think, and it helps us relate and apply what we already
know to new information.
The book you're holding takes a page from Socrates, as did its
predecessor Exceptional C++ . This book assumes that you're involved in
some aspect of writing production C++ software today, and uses a
question-answer format to teach how to make effective use of standard
C++ and its standard library witha particular focus on sound software
engineering in modern C++. Many of the problems are drawn directly from
experiences I and others have encountered while working with production
C++ code. The goal of the questions? To guide, to help you draw
conclusions from things you already know as well as things you've just
learned, and to show how new things interrelate. The puzzles are
designed to help show how to reason about C++ design and programming
issues_some of them common issues, some not so common; some of them
plain issues, some more esoteric; and a couple because, well, just
because they're fun, so there.
This book is about all aspects of C++. I don't mean to say that this
book touches on every detail of C++_that would require many more
pages_but rather that it draws from the wide palette of the C++ language
and library features to showhow apparently unrelated parts of the
palette can be used together to synthesize novel solutions to common
problems. It also shows how apparently unrelated parts of the palette
interrelate all on their own even when you don't necessarily want them
to, and what to do about it. You will find material here about templates
and namespaces, exceptions and inheritance, solid class design and
design patterns, generic programming and macro magic_and not just as
randomized tidbits, but as cohesive Items showing the interrelationships
between all of these parts of the whole that is modern C++.
What's "More"?
More Exceptional C++ continues where Exceptional C++ left off.
This book follows in the tradition of the first: It delivers more new
material organized in bite-sized Items grouped into themed sections.
Readers of the first book will find some familiar section themes, now
with new material, including the themes of exception safety, generic
programming, and memory management techniques. The difference here is
that this material is all new since Exceptional C++; the two books
overlap in structure and theme, not in content.
Where else does More Exceptional C++ differ? This book has a much
stronger emphasis on generic programming and using the C++ standard
library effectively, including coverage of important techniques like
traits and predicates. Several Items provide in-depth looks at important
considerations to remember when using the standard containers and
algorithms, and many of the considerations are ones I've not yet seen
covered elsewhere. There's a new section, and two appendixes, focusing
on on optimization in single- and multithreaded environments_issues that
are now more than ever of practical consequence for development shops
writing production code.
Earlier versions of most Items originally appeared in the form of
Internet and magazine columns_particularly as Guru of the Week1 issues
#31-62, and as print columns and articles I've written for C/C++ Users
Journal, Dr. Dobbs Journal, the former C++ Report , and other
publications. The material in this book has been significantly revised,
expanded, corrected, and updated since those initial versions, and this
book (along with its de rigueur errata list available at www.gotw.ca)
should be treated as the current and authoritative version of that
original material.
What I Assume You Know
I expect that you already know the basics of C++. If you don't, start
with a good C++ introduction and overview_good choices are a classic
tome like Bjarne Stroustrup's The C++ Programming Language, or Stan
Lippman and Josee Lajoie's C++ Primer, 3rd Edition. Next, be sure to
pick up a style guide like Scott Meyers' classic Effective C++ books (I
find the browser-based CD version convenient and useful).
How To Read This Book
Each item in this book is presented as a puzzle or problem, with an
introductory header that looks like this:
Item ##: The Topic of This Puzzle (X / 10)
The topic tag and difficulty rating gives you a hint at what you're in
for. Note that the difficulty rating is my own subjective guess at how
relatively difficult I expect most people will find each problem, so you
may well find that a given "7/10" problem is easier for you than another
"5/10" problem. Since I wrote Exceptional C++, I've regularly received
e-mail saying "Item #N is easier (or, harder) than that!"_and it's
common for different people to vote "It's easier!" and "It's harder!"
for the same Item. Ratings aresomewhat personal, because any Item's
actual difficulty for you really depends on your existing knowledge and
experience and could be easier or harder for someone else. In most
cases, though, you should find the rating to be a good rule-of-thumb
guide as to what to expect.
You might choose to read the whole book front to back; that's great, but
you don't have to. You might decide to read all the Items in a section
together because you're particularly interested in that section's topic;
that's cool too. Except where there are what I call "miniseries" of
related problems that you'll see designated as "Part I", "Part II", and
so on, the Items are pretty independent, and you should feel free to
jump around following the many cross-references among the Items in the
book, as well as some references to Exceptional C++. The only guidance
I'll offer is that the multi-part miniseries are designed to be read
consecutively as a group; other than that, the choice is yours.
Namespaces, Typename, References, and Other Conventions
In this book, I make quite a few recommendations. In order to avoid
being a hypocrite, or even looking like one, I won't give you guidelines
that tell you to do something that I don't already do myself, and that
includes what I do in my own example code throughout this book. I'll
also bow to existing practice and modern style even when it really makes
no material difference.
On that note, a word about namespaces: In the code examples, if you see
me writing a using-directive at file scope in one example and at
function scope in another example a few pages or Items later, there's no
deeper reason than it's just because that's what felt right and
aesthetically pleasing to me for thatparticular case; see Item 40 for
the rationale. In the text itself, I've chosen to qualify standard
library names with std:: when I want to emphasize that it's the standard
facility I'm talking about, but once that's established I'll generally
switch back to using the unqualified name.
When it comes to declaring template parameters, I sometimes come across
people who think that writing class instead of typename is
old-fashioned, even though there's no functional difference between the
two and the standard itself uses class most everywhere. Purely for
style, and to emphasize that this book is about today's modern C++, I've
switched to using typename instead of class to declare template
parameters. The only exception is one place in Item 33 where I quote
directly from the standard; the standard says class, so I left it in
there.
Unless I call something a "complete program," it's probably not.
Remember that the code examples are usually just snippets or partial
programs and aren't expected to compile in isolation. You'll usually
have to provide some obvious scaffolding to make a complete program out
of the snippet shown.
Finally, a word about URLs: On the Web, stuff moves. In particular,
stuff I have no control over moves, which makes it problematic for me to
publish random Web URLs in a print book lest they become out of date
before the book makes it to the printer, never mind after it's been
sitting on your desk for fiveyears. Where I reference other peoples'
articles or Web sites in this book, I do it via a URL on my own Web
site, www.gotw.ca, which I can control and which contains just a
straight redirect to the real Web page. If you find that a link printed
in this book no longer works, send me mail and tell me; I'll update that
redirector to point to the new page's location (if I can find the page
again) or to say that the page no longer exists (if I can't). Either
way, this book's URLs will stay up to date despite the rigors of print
media in an Internet world. Whew.
Herb Sutter
Toronto, June 2001
1 See http://www.gotw.ca/gotw.
Table of Contents
Foreword.
Preface.
Generic Programming and the C++ Standard Library.
Item 1: Switching Streams (2 / 10).
Item 2: Predicates, Part 1: What remove() Removes (4 / 10).
Item 3: Predicates, Part 2: Matters of State (7 / 10).
Item 4: Extensible Templates: Via Inheritance or Traits? (7 / 10).
Item 5: Typename (7 / 10).
Item 6: Containers, Pointers, and Containers That Aren't (5 / 10).
Item 7: Using Vector and Deque (3 / 10).
Item 8: Using Set and Map (5 / 10).
Item 9: Equivalent Code? (5 / 10).
Item 10: Template Specialization and Overloading (6 / 10).
Item 11: Mastermind (8 / 10).
Optimization and Performance.
Item 12: Inline (4 / 10).
Item 13: Lazy Optimization, Part 1: A Plain Old String (2 / 10).
Item 14: Lazy Optimization, Part 2: Introducing Laziness (3 / 10).
Item 15: Lazy Optimization, Part 3: Iterators and References (6 / 10).
Item 16: Lazy Optimization, Part 4: Multi-Threaded Environments (8 /
10).
Exception Safety Issues and Techniques.
Item 17: Constructor Failures, Part 1: Object Lifetimes (4 / 10).
Item 18: Constructor Failures, Part 2: Absorption? (7 / 10).
Item 19: Uncaught Exceptions (6 / 10).
Item 20: An Unmanaged Pointer Problem, Part 1: Parameter Evaluation (6 /
10).
Item 21: An Unmanaged Pointer Problem, Part 2: What About auto_ptr? (8 /
10).
Item 22: Exception-Safe Class Design, Part 1: Copy Assignment (7 / 10).
Item 23: Exception-Safe Class Design, Part 2: Inheritance (6 / 10).
Inheritance and Polymorphism.
Item 24: Why Multiple Inheritance? (6 / 10).
Item 25: Emulating Multiple Inheritance (5 / 10).
Item 26: Multiple Inheritance and the Siamese Twin Problem (4 / 10).
Item 27: (Im)pure Virtual Functions (7 / 10).
Item 28: Controlled Polymorphism (3 / 10).
Memory and Resource Management.
Item 29: Using auto_ptr (5 / 10).
Item 30: Smart Pointer Members, Part 1: A Problem with auto_ptr (5 /
10).
Item 31: Smart Pointer Members, Part 2: Toward a ValuePtr (6 / 10).
Free Functions and Macros.
Item 32: Recursive Declarations (6 / 10).
Item 33: Simulating Nested Functions (5 / 10).
Item 34: Preprocessor Macros (4 / 10).
Item 35: #Definition (4 / 10).
Miscellaneous Topics.
Item 36: Initialization (3 / 10).
Item 37: Forward Declarations (3 / 10).
Item 38: Typedef (3 / 10).
Item 39: Namespaces, Part 1: Using-Declarations and Using-Directives (2
/ 10).
Item 40: Namespaces, Part 2: Migrating to Namespaces (4 / 10).
Afterword.
Appendixes,
Appendix A. Optimizations That Aren't (In a Multithreaded World).
Appendix B. Test Results for Single- versus Multi-Thread-Safe String
Implementations.
Bibliography.
Index.
Auteur : SUTTER
Editeur : ADDISON WESLEY
Nombre de pages : 278
Date de publication : 01 2002
Toute la sélection
Toutes les sélections
Toute la sélection
Site réalisé en partenariat avec Courbis
(Courbis - alternate link), acteur de l'Internet depuis 1988...