Books' Index

This index contains the index entries from Effective C++ and More Effective C++. It has no information about the CD's magazine articles, nor does it cover CD-specific pages like the Introduction. To perform a comprehensive search of everything on the CD, use the search applet.

Within the index, page numbers corresponding to Effective C++ are preceded by an E. Those corresponding to More Effective C++ are preceded by an M. Hence, E126 means page 126 of Effective C++, and M15 means page 15 — not Item 15! — of More Effective C++.

Example classes and class templates used in the books are indexed under example classes/templates. Example function and function templates are indexed under example functions/templates. Many example uses of new and lesser-known language features are indexed under example uses.

In this index, the term definition refers to a C++ definition. English definitions — definitions of terms — are labeled "definition (English)" and are summarized under English definitions.

Before A

#define M294
.cpp files E138
?:, vs. if/then M56
__cplusplus M273
">>", vs. "> >" M29
0, see zero
1066 E154
80-20 rule E143, E168, M79, M82-M85, M106
90-10 rule Mxi, M82

A

abort E26
assert and M167
object destruction and M72
relationship to terminate M72
violated exception specifications and E28
abstract classes E161, E201
definition (English) E63
drawing M5
identifying M267, M268
inheritance and M258, M270
transforming from concrete M266-M269
abstract mixin base classes M154
abstractions
functional E89-E90
identifying M267, M268
useful M267
access-declarations M144
accessibility
control over data members' E89
restrictions
handles and E124
inheritance and E115
Ada E57, E224
adding data and functions to classes at runtime M287
address comparisons to determine object locations M150-M152
address equality E75
addresses, of inline functions E140
address-of operator, see operator&
adjacent differences E231
Advanced C++: Programming Styles and Idioms Exvii, Exviii, M287
Adventure, allusion to M271
Afshar, Jamshid Mxii
algorithms, in standard C++ library E229
aliasing E52, E53, E75-E76, E101
definition (English) E72
Alice's Restaurant, allusion to E43
allocation, see memory management, operator new, memory allocation
allocators E227
ambiguity
deliberately introducing E111
diamonds and E200
libraries and E114
MI and E114-E115, E195, E200
potential E113-E116
type conversions and E113-E114
American National Standards Institute (ANSI) E234
amortizing computational costs M93-M98
Annotated C++ Reference Manual, The, see ARM
ANSI/ISO standardization committee, see ISO/ANSI standardization committee
APL M92
application framework M234
approximating
see also enum hack
bool E10,M3-M4
C++-style casts M15-M16
const static data members M141
explicit M29-M31
in-class using declarations M144
mutable M89-M90
namespaces E119-E122
virtual functions M121
vtbls M235-M251
Arbiter, Petronius Ei
ARM (The Annotated C++ Reference Manual) Exvii, E61, E138, E195, E196, E235-E236, Mxii, M277, M285
array new E36, M42
arrays
associative M236, M237
auto_ptr and M48
default constructors and M19-M21
dynamic M96, M98
inheritance and M17-M18
memory allocation for M42-M43
multi-dimensional M213-M217
of objects with constructors E5-E6
of pointers to functions M15, M113
of pointers, as substitute for arrays of objects M20
pointer arithmetic and M17
pointers into M280
using placement new to initialize M20-M21
ASPECT_RATIO E13-E14
<assert.h> E26
assert macro E26
abort and M167
NDEBUG and E26
assignment
arrays and E81
in reference-counted value classes M196
mixed-type M260, M261, M263-M265
of members, see member assignment
of pointers and references M11
operator, see operator=
partial M259-M263, M265
prohibiting E52
through pointers M259, M260
to base part of object E69-E70
to self E71-E73
vs. initialization E8-E9, E136
associative arrays M236, M237
author, contacting Exv, M8
auto_ptr E25, M49, M53, M57, M58, M137, M139, M162, M240, M257
assignment of M162-M165
copying of M162-M165
heap arrays and M48
implementation M291-M294
object ownership and M183
pass-by-reference and M165
pass-by-value and M164
preventing resource leaks and M48, M58
automatically generated functions E212-E216
Avery, Katrina Mxiii

B

bad_alloc class M70, M75
bad_cast class M70, M261, M262
bad_exception class M70, M77
bad_typeid class M70
Barry, Dave, allusion to Exix, E234
Barton, John J. M288
base classes
see also inheritance
catch clauses and M67
constructor arguments E200
delete and M18
derived operator= and E69-E70
for counting objects M141-M145
initialization order E58
initialization when virtual E200
meaning when common E210
nonvirtual E200
virtual, see virtual base classes
BASIC M156, M213
basic_ostream template E226, E227
basic_string class M279, M280
Battle of Hastings E154
Beauchaine, Bob Mxiii
Becker, Pete Exviii
begin function M283
behavior
undefined, see undefined behavior
customization via virtual functions E206-E207
benchmarks M80, M110, M111
Bengtsson, Johan Exix
Bern, David Exviii, Exix
Besaw, Jayni Mxv
best fit M67
Bible, allusion to M235
binary upgradeability, inlining and E142
binding
dynamic, see dynamic binding
static, see static binding
birds and penguins E156-E158
bitset template E229, M4, M283
bitwise const member functions E94
bitwise copy
during assignment E50, E213
during copy construction E51, E213
Blankenbaker, Paul Exix
bloated code, due to templates E190
block-local variables, defining E135-E137
Body classes, see Handle/Body classes
books
see also recommended books
Advanced C++: Programming Styles and Idioms Exvii, Exviii, M287
ARM, The, see ARM
C Programming Language, The Exviii, M36
C++ Programming Language, The Exvii, M286
C++ Programming Style Exviii, M287
C++ Strategies and Tactics Exviii, Mxiii
Computer Architecture: A Quantitative Approach Mxi
Design and Evolution of C++, The E234, Mxiii, M278, M285
Design Patterns CD: Elements of Reusable Object-Oriented Software M289
Design Patterns: Elements of Reusable Object-Oriented Software M288
Designing and Coding Reusable C++ Exviii, M288
Effective C++ Mxii, M5, M100, M286
International Standard for Information Systems — Programming Language C++ E234
Large-Scale C++ Software Design Exviii
More Effective C++ E237-E238
Scientific and Engineering C++ M288
Some Must Watch While Some Must Sleep E154
Taligent's Guide to Designing Programs Exviii, Mxii
bool E9, M3, M4
approximating E10
Bosch, Derek Exix
boss, pointy-haired E187
Box, Don Mxii, Mxiii
Braunegg, David Exix
Brazile, Robert Exix
breakpoints, and inlining E142
buffering, in iostreams E229
bugs in Effective C++, reporting Exv
bugs in More Effective C++, reporting M8
Burkett, Steve Exviii, Mxiii
Buroff, Steven Mxii
butterfly effect, the E221
bypassing
constructors M21
exception-related costs M79
RTTI information M122
smart pointer smartness M171
strong typing M287
virtual base classes M122
virtual functions M122

C

C
dynamic memory allocation M275
functions and name mangling M271
headers, in standard C++ library E225
linkage M272
migrating to C++ M286
mixing with C++ M270-M276
standard library M278
C Programming Language, The Exviii, M36
C-style casts M12, M90
C style comments, vs C++ style E21
C Users Journal Mxiii
C++
dynamic memory allocation M275
migrating from C M286
mixing with C M270-M276
standard library, see standard C++ library
C++ Programming Language, The Exvii, M286
C++ Programming Style Exviii, M287
C++ Report Exvii, Exviii, Mxii, Mxiii, Mxv, M287, M289
C++ Strategies and Tactics Exviii, Mxiii
C++ style comments, vs. C style E21
C++-style casts M12-M16
approximating M15-M16
C, Objective E195
C, used in Effective C++ E12
C/C++ Users Journal Exviii, Mxiii, M289
c_str M27
caching M94-M95, M98
hit rate, inlining and E137
callback functions M74-M75, M79
calls to functions, see function calls
Candide, allusion to M19
Cargill, Tom Exviii, Exix, Mxii, Mxiii, Mxv, M44
Carolan, John Exviii
Carroll, Glenn Exix
Carroll, Martin Exviii, M288
Casablanca, allusion to E96
<cassert> E26
casts
advantages of new vs. old forms E10
C++-style M12-M16
C-style M12, M90
downcasts E176
new forms for E10-E11
of function pointers M15, M242
safe M14
temptations of E175
to references E70
to remove constness or volatileness E96-E97, E124, M13, M221
catch M56
see also pass-by-value, pass-by-reference, pass-by-pointer
by pointer M70
by reference M71
by value M70
clauses, order of examination M67-M68
clauses, vs. virtual functions M67
inheritance and M67
temporary objects and M65
cerr E226
change, designing for M252-M270
changes in second edition of Effective C++ Exiv-Exv
chaos theory E221
Chappell, Tom Exviii
char*s, vs. string classes E8, M4
characters
Unicode M279
wide M279
Cheshire Cat classes E146-E149
Chisholm, Paul Exix
cin E226
clairvoyance, and MI E199
Clamage, Steve Exvii, Exviii, Exix, Mxii, Mxiii, Mxiv
Clancy, see Urbano, Nancy L.
Claris, a guy at Exviii
class definitions
compilation dependencies and E147
object sizes and E145
vs. class declarations E147
classes
see also class definitions, interfaces
abstract E63, E161, M154
drawing M5
adding members at runtime M287
base, see base classes
Body E146-E149
Cheshire Cat E146-E149
concrete, drawing M5
constants within E14-E15
declaring E4
vs. defining E147
defining E5
derived, see derived classes
designing, see design
diagnostic, in the standard library M66
Envelope/Letter E146-E149
extent E59
for collections E191
for registering things M250
for type-safe interfaces E192
Handle/Body E146-E149
hiding implementations E146-E152
influence of type on behavior E186
initialization order E58
interface, efficiency of E194
meaning of no virtual functions E61
members, see members
mixin M154
modifying, and recompilation M234, M249
nested, and inheritance M197
nested, examples E186, E218
Protocol E149-E152, E173, E201
proxy, see proxy classes
sharing common features E208
specification, see interfaces
templates for, specializing M175
transforming concrete into abstract M266-M269
unnamed, compiler diagnostics and E112
virtual base, see virtual base classes
class-specific constants E14-E15
cleaning your room M85
cleverness in the standard C++ library E108
client, definition E9, M7
CLOS E195, M230
COBOL E113, M213, M272
code
amazing E194
bloat, due to templates E190
generalizing M258
incorrect, efficiency and E101, E124, E129, E131
replication M47, M54, M142, M204, M223, M224
avoiding E109, E191-E193
un-inlined inline functions and E139
reuse E202
poor design and E206-E209
via smart pointer templates and base classes M211
via the standard library M5
size, with inline functions E137
Cok, David Mxii
collections, based on pointers E191
Colvin, Gregory Mxiii
combining
free with delete E20
public and private inheritance E201-E205
comma operator, see operator,
comments
#define and E21
C style vs. C++ style E21
eliminating E137
within comments E21
committee for C++ standardization, see ISO/ANSI standardization committee
common
base classes, meaning of E210
features, inheritance and E164, E208
comp.lang.c++ Exviii, Mxi, Mxii, Mxiii, M289
comp.lang.c++.moderated M289
comp.std.c++ Mxi, M290
comparing addresses to determine object location M150-M152
compatibility
with C, as C++ design goal E233
with other languages, vptrs and E61
compilation dependencies
class definitions and E147
minimizing E143-E152
pointers, references, and objects and E147
compilers
diagnostics for unnamed classes E112
lying to M241
warnings from E223-E224
compile-time errors E110
benefits of E219
vs. runtime errors E216
complete interfaces E79, E184
complex numbers M279, M280
<complex> E225
complex template E226, E231
<complex.h> E225
complexities
of multiple inheritance E195-E201
of virtual base classes E201
composition, see layering
Computer Architecture: A Quantitative Approach Mxi
conceptually const member functions E95-E97
concrete classes
drawing M5
inheritance and M258-M270
transforming into abstract M266-M269
concurrency E225
conditionals and switches vs. virtual functions E176
consistency
among +, =, and +=, etc. M107
between built-in and user-defined types M254
between prefix and postfix operator++ and operator-- M34
between real and virtual copy constructors M126
public interfaces and E89
with the built-in types E66, E78, E82, E92
const E91-E97
bitwise E94
casting away E96-E97, E124
conceptual E95-E97
data members E53-E54
in function declarations E92-E97
member functions E92-E97, M89, M160, M218
handles and E128
members, in-class initialization of E14
overloading on E92-E93
pointers E91, E121
return types M33-M34, M101
return value E92, E125
static data members, initialization M140
uses E91
vs. #define E13-E14
const_cast E10, M13, M14, M15, M37, M90
example use E96, E97, E124
const_iterator type M127, M283
constant pointers M55-M56
constants E14
see also const
class-specific E14-E15
constness, casting away M13, M221
constructing objects on top of one another M287
construction
of local objects E131
phases of E54
with vs. without arguments E136
constructors E77
see also construction
arrays of objects and E5-E6
as type conversion functions M27-M31
bypassing M21
calling directly M39
copy, see copy constructors
default, see default constructors
empty, illusion of E141
explicit E67, E85, M28-M31, M227, M294
fully constructed objects and M52
implicitly generated E212
inlining and E140-E142
lazy M88-M90
malloc and E19-E20, M39
manual invocation of E141
memory leaks and M6
object definitions and E135
operator new and E141, M39, M149-M150
operator new[] and M43
passing arguments E200
preventing exception-related resource leaks M50-M58
private E218, M130, M137, M146
protected M142
pseudo, see pseudo-constructors
purpose M21
references and M165
relationship to new operator and operator new E23, M40
single-argument M25, M27-M31, M177
static initialization and M273
static member initialization and E57, E58
structs and E186
virtual, see virtual constructors
contacting the author Exv, M8
containers, see standard C++ library
containment, see layering
contexts for object construction M136
control over data members' accessibility E89
conventions
for I/O operators M128
for names E11, E138, E144
in the STL E232, M284
used in More Effective C++ M5-M8
conversion functions, see type conversion functions
conversions, see type conversions
Coplien, Jim Exvii, Exviii, M287
copy algorithm E230
copy construction, prohibiting E52
copy constructors E6, E109, M146
bitwise copy and E51, E213
classes with pointers and M200
default definition E213
exceptions and M63, M68
for strings M86
implicitly generated E212
inheritance and E71
memberwise copy E213
motivation for making private E52
non-const parameters and M165
pass-by-value and E6, E77, E98-E99
pointer members and E51-E52
rationale for default behavior E233
return-by-value and E6
smart pointers and M205
virtual, see virtual copy constructors
copying objects
exceptions and M68
static type vs. dynamic type M63
when throwing an exception M62-M63
copy-on-write M190-M194
Corbin, David Exix
correctness, assignment to self and E72
costs
see also efficiency, optimization
assignment vs. construction and destruction E105
of Handle classes E151
of initialization vs. assignment E55
of inline functions that aren't E139
of minimizing compilation dependencies E151
of nonminimal interfaces E80
of pass-by-value E98-E99
of Protocol classes E151
of unused objects E135
of virtual base classes E198, E118-E120
count_if algorithm E230
counting objects E59, M141-M145
cout E226
cows, coming home E143
<cstdio> E225, E226
<cstdlib> E127
<cstring> E225, E226
C-style casts M12
ctor, definition M6
custom memory management
see memory management
customizations via virtual functions E206-E207

D

D&E E234
data members
adding at runtime M287
auto_ptr M58
control over accessibility E89
default assignment E213
default initialization E213
initialization vs. assignment E53-E57
initialization when const M55-M56
initialization when static M140
replication, under multiple inheritance M118-M120
static, in templates M144
virtual base classes and E200
dataflow languages M93
Davis, Bette, allusion to M230
Davis, Tony Exix, Mxiii
Dawley, Kim Exx, Mxiv
DBL_MIN E107
deallocation, see memory management, operator delete
debuggers
#define and E14
inline functions and E142
declarations E4
of classes E4
of functions E4
of objects E4
of templates E4
replacing definitions E147
decoupling interfaces and implementations E146-E152
decrement operator, see operator--
default construction
avoiding when unneeded E137
vs. construction with arguments E136
default constructors E5, E109
arrays and M19-M21
definition M19
implicitly generated E212
meaningless M23
restrictions from M19-M22
templates and M22
virtual base classes and M22
when to/not to declare M19
default implementations
for virtual functions, danger of E163-E167
of copy constructor E213
of operator= E213
default parameters E171-E173
operator new and E39
static binding of E173
vs. overloading E106-E109
#define
comments and E21
debuggers and E14
disadvantages of E14, E16
vs. const E13-E14
vs. inline functions E15-E16
defining
objects E135-E137
variables E135-E137
in if statements E181
definitions E4
deliberate omission of E116
for implicitly generated functions E213
for pure virtual functions E162, E166-E167
for static class members E29
of classes E5
of functions E4
of objects E4
of templates E5
replacing with declarations E147
delete
see also delete operator, operator delete, ownership
combining with free E20
communication with new E40
consistency with new E43
deleted pointer and E52
determining when valid M152-M157
example implementation E44
inheritance and M18
memory not from new and M21
nonvirtual destructors and M256
null pointers and E25, M52
objects and M173
operator delete and E23
relationship to destructors E23, E59-E63
smart pointers and M173
this and M145, M152, M157, M197, M213
delete operator M37, M41, M173
operator delete[] and destructors and M43
placement new and M42
this and M145, M152, M157, M197, M213
deletion
virtual destructors and E59-E63
deliberately introducing ambiguity E111
delimiters, field, implementing via virtual functions E202
Dement, William E154
deprecated features M7
access declarators M144
conversion from const char* to char* E91
old C++ .h headers E225
statics at file scope M246
strstream class M279
deque template E229, M283
derived classes
catch clauses and M67
delete and M18
hiding names in base classes E224, E235
implementing destructors in E141
operator= and E69-E70, M263
prohibiting M137
design
contradiction in E170
for change M252-M270
multiple dispatch and M235
object-oriented E153-E211
of function locations M244
of libraries M110, M113, M284, M288
of templates M286
of types and classes E77-E78, M33, M133, M186, M227, M258, M268
of virtual function implementation M248
patterns M123, M288
poor, and code reuse E206-E209
poor, and MI E205-E209
Design and Evolution of C++, The E234, Mxiii, M278, M285
design goals, for C++ E232
Design Patterns CD: Elements of Reusable Object-Oriented Software M289
Design Patterns: Elements of Reusable Object-Oriented Software M288
Designing and Coding Reusable C++ Exviii, M288
destruction, static M273-M275
destructors E77
delete and M256
exceptions and M45
free and E19-E20
fully constructed objects and M52
inlining and E140-E142
local objects and E131
longjmp and M47
memory leaks and M6
multiple pointers and E191
nonvirtual E81
object deletion and E59-E63
operator delete[] and M43
partially constructed objects and M53
possible implementation in derived classes E141
private M145
protected M142, M147
pseudo M145, M146
pure virtual E63, M195, M265
relationship to delete E23
smart pointers and M205
virtual M143, M254-M257
behavior of E61
object deletion and E59-E63
determining
whether a pointer can be deleted M152-M157
whether an object is on the heap M147-M157
diagnostics classes of the standard C++ library M66
diamonds, see multiple inheritance
differences between first and second editions of Effective C++ Exiv-Exv
Dilbert E187
dispatching, see multiple dispatch
distinguishing lvalue and rvalue use of operator[] M87, M217-M223
domain_error class M66
dominance E200
double application of increment and decrement M33
double-dispatch, see multiple dispatch
downcasting E176-E181, E196
definition (English) E176
eliminating E179
safe E179-E181
use with read-only libraries E179
vs. virtual functions E180
dtor, definition M6
Duby, Carolyn Mxiii
dumb pointers M159, M207
duplication of code, see replication of code
dynamic arrays M96-M98
dynamic binding
definition (English) E172
of virtual functions E170
dynamic type
definition (English) E172
vs. static type M5-M6
vs. static type, when copying M63
dynamic_cast E10, E179-E181, M6, M37, M261-M262
approximating M16
example use E180, E181, M156
meaning M14
null pointer and M70
to get a pointer to the beginning of an object M155
to reference, failed M70
to void* M156
virtual functions and M14, M156

E

eager evaluation M86, M91, M92, M98
converting to lazy evaluation M93
Eastman, Roger Exix
Eckel, Bruce Mxiii
Edelson, Daniel Mxii, M179
Effective C++ Mxii, M5, M100, M286
vs. More Effective C++ E237
Web site for Exvi
efficiency
see also costs, compilation dependencies, optimization
as C++ design goal E233
assigning smart pointers and M163
assignment to self and E72
assignment vs. construction and destruction E105
benchmarks and M110
binding default parameter values and E173
caching and E90, M94-M95, M98
class statics vs. function statics M133
constructors and destructors and M53
copying smart pointers and M163
cost amortization M93-M98
custom memory management and E43
encapsulation and M82
function return values and M101
implications of meaningless default constructors M23
incorrect code and E101, E105, E124, E129, E131
initialization vs. assignment E54
initialization with vs. without arguments and E136
inlining and M129
iostreams vs. stdio E18, M110-M112
language rules and E233
libraries and M110, M113
locating bottlenecks M83
macros vs. inline functions E16
maintenance and M91
manual methods vs. language features M122
member initialization/finalization order and E58
memory allocation routines and E39
multiple inheritance and M118, M120
object size and M98
of allocation for small objects E39-E48
of exception-related features M64, M70, M78-M80
of initializing static members in constructors E57
of interface classes E194
of numeric_limits E107
of prefix vs. postfix increment and decrement M34
of stand-alone operators vs. assignment versions M108
of standard strings E229
operators new and delete and M97, M113
paging behavior and M98
pass-by-pointer and M65
pass-by-reference and E99, M65
pass-by-value and E98-E99, M65
passing built-in types and E101
prefetching M96-M98
profiling and M84-M85, M93
reading vs. writing reference-counted objects M87, M217
reference counting and E52, E229, M183, M211
returning pointers/references to class members and E131
runtime checks and E216
space penalty of MI E199
space vs. time M98
summary of costs of various language features M121
system calls and M97
temporary objects and M99-M101
tracking heap allocations and M153
unused objects and E135
virtual functions and E168, M113-M118
virtual functions vs. manual methods M121, M235
vptrs and M116, M256
vs. minimalness in class interfaces E80
vs. syntactic convenience M108
vtbls and M114, M256
Eiffel E146, E195
80-20 rule E143, E168
Einstein, Albert E101
Ellis, Margaret Exviii, E235, Mxii, M285, M288
email address for the author Exv, M8
embedding, see layering
emulating features, see approximating
encapsulation
allowing class implementations to change M207
efficiency and M82
end function M283
English definitions
of aliasing E72
of Body class E148
of Cheshire Cat class E148
of client E9, M7
of downcast E176
of dynamic binding E172
of dynamic type E172
of Envelope class E148
of Handle class E148
of has-a relationship E182
of integral types E15
of isa relationship E155
of is-implemented-in-terms-of relationship E183
of layering E182
of Letter class E148
of local static objects E222
of MI E194
of non-local static objects E221
of Protocol class E149
of static type E171
of translation unit E220
enum hack E15
enums
overloading operators and M277
Envelope/Letter classes E146-E149
equal algorithm E230
equality, see object equality
errata list, on-line
for Effective C++ Exvi
for More Effective C++ M8
errors
benefits of compile-time detection E219
compile-time E110
vs. runtime E216
detected during linking E14, E64, E117, E139, E219
library support for E231
link-time vs. runtime E216
off-by-one E83
runtime E110, E157
evaluation
converting eager to lazy M93
eager M86, M91, M92, M98
lazy M85-M93, M94, M98, M191, M219
over-eager M94-M98
short-circuit M35, M36
Eve E176
example classes/templates
A E5, E113, E198
AbstractAnimal M264
AccessLevels E89
Address E129, E182
Airplane E39, E41, E44, E47, E163, E164, E166
AirplaneRep E39
Airport E163
ALA M46
Animal M258, M259, M263, M265
Array E57, E62, E81, E116, M22, M27, M29, M30, M225
Array::ArraySize M30
Array::Proxy M225
Array2D M214, M215, M216
Array2D::Array1D M216
Asset M147, M152, M156, M158
Asteroid M229
AudioClip M50
AuxGraphicalObject E196
AuxLottery E196
AWOV E63
B E5, E113, E169, E198, E224, M255
BalancedBST M16
BankAccount E174, E177, E178, E180
Base E35, E37, E69, E71, E75, E140, E235
Base1 E114, E115
Base2 E114, E115
Bird E156, E158
BookEntry M51, M54, M55, M56, M57
BritishShortHairedTabby E188
BST M16
C E6, E75, E198
C1 M114
C2 M114
CallBack M74
CantBeInstantiated M130
CartoonCharacter E205, E208
Cassette M174
CasSingle M178
Cat E188
CatStack E192, E193
CD M174
CheckingAccount E176, E177, E178, E180
Chicken M259, M260, M263, M265
Circle E172
Clock E5
CollisionMap M249
CollisionWithUnknownObject M231
ColorPrinter M136
Complex E101
Counted M142
CPFMachine M136
Cricket E206, E207, E208
D E169, E198, E224, M255
DatabaseID E204
DataCollection M94
Date E217, E218
Date::Month E218
DBPtr M160, M171
Derived E35, E69, E71, E76, E114, E115, E140, E235, E236
Directory E220, E222
DynArray M96
Ellipse E161
Empty E212
EnemyTank E60
EnemyTarget E59
EngineeringConstants E15
EquipmentPiece M19, M23
FileSystem E220
FlyingBird E156
FSA M137
GameObject M229, M230, M233, M235, M242
GamePlayer E14, E15
GenericStack E193
Graphic M124, M126, M128, M129
GraphicalObject E195
Grasshopper E206, E207, E208
HeapTracked M154
HeapTracked::MissingAddress M154
Image M50
Insect E208
InterestBearingAccount E177
IntStack E192, E193
Kitten M46
LargeObject M87, M88, M89
Lizard M259, M260, M262, M263, M265
LogEntry M161
Lottery E195
LotterySimulation E195, E197
ManyDataMbrs E55, E56
Matrix M90
ModelA E163, E165, E166
ModelB E163, E165, E166
ModelC E164, E165, E167
Month E218
MusicProduct M173
MyPerson E205
Name M25
NamedArray E62
NamedObject E214, E215
NamedPtr E53, E54, E68
Natural E109
NewHandlerSupport E32
NewsLetter M124, M125, M127
NLComponent M124, M126, M128, M129
NonFlyingBird E157, E158
NonNegativeUPNumber M146, M147, M158
NullClass E111
Penguin E156, E157, E158
Person E98, E129, E130, E143, E144, E145, E146, E149, E150, E155, E174, E182, E189, E201, E204
PersonImpl E146
PersonInfo E202, E204
PhoneNumber E182, M50
Point E61
Pool E46
Printer M130, M132, M135, M138, M140, M141, M143, M144
Printer::TooManyObjects M135, M138, M140
PrintingStuff::Printer M132
PrintJob M130, M131
Puppy M46
Rational E18, E84, E86, E101, E132, M6, M25, M26, M102, M107, M225
RCIPtr M209
RCObject M194, M204
RCPtr M199, M203
RCWidget M210
RealPerson E150
Rectangle E159, E161, E171
RegisterCollisionFunction M250
Satellite M251
SavingsAccount E174, E177, E178, E180
sdm::Handle E118, E120
sdmHandle E117
Session M59, M77
Set E183, E184
Shape E161, E171
Siamese E188
SmartPointer E5
SmartPtr M160, M168, M169, M176, M178, M181
SmartPtr<Cassette> M175
SmartPtr<CD> M175
SmartPtrToConst M181
SpaceShip M229, M230, M233, M235, M236, M238, M239, M240, M243
SpaceStation M229
SpecialLotterySimulation E196
SpecialWidget M13, M63
SpecialWindow M269
SpeedDataCollection E90
Square E159
Stack E186, E187, E188, E194
Stack::StackNode E186
String E6, E49, E72, E87, E93, E94, E95, E96, E124, E126, M85, M183, M186, M187, M188, M189, M190, M193, M197, M198, M201, M204, M218, M219, M224
String::CharProxy M219, M224
String::SpecialStringValue M201
String::StringValue M186, M193, M197, M201, M204
Student E98, E155, E189
TextBlock M124, M126, M128, M129
Tuple M161, M170
TupleAccessors M172
TVStation M226
UnexpectedException M76
UPInt M32, M105
UPNumber M146, M147, M148, M157, M158
UPNumber::HeapConstraintViolation M148
Validation_error M70
Wacko E58
Widget E65, E91, E121, M6, M13, M40, M61, M63, M210
widgets E121
Window E100, M269
WindowHandle M49
WindowWithScrollBars E100
X E28, E29, E32, E38, E39
Y E29
example functions/templates
AbstractAnimal::~AbstractAnimal M264
AbstractAnimal::operator= M264
AccessLevels::getReadOnly E89
AccessLevels::getReadWrite E89
AccessLevels::setReadOnly E89
AccessLevels::setWriteOnly E89
Airplane::defaultFly E165
Airplane::fly E163, E166
Airplane::operator delete E44, E47
Airplane::operator new E42, E47
ALA::processAdoption M46
allocateSomeObjects M151
Animal::operator= M258, M259, M263, M265
Array::Array E57, M22, M27, M29, M30
Array::ArraySize::ArraySize M30
Array::ArraySize::size M30
Array::operator[] M27
Array<T>::Proxy::operator T M225
Array<T>::Proxy::operator= M225
Array<T>::Proxy::Proxy M225
Array2D::Array2D M214
Array2D::operator() M215
Array2D::operator[] M216
Asset::~Asset M147
Asset::Asset M147, M158
assignmentTester E69
asteroidShip M245
asteroidStation M245, M250
AudioClip::AudioClip M50
AuxGraphicalObject::draw E196
AuxLottery::draw E196
AWOV::AWOV E63
Base::operator delete E37
BookEntry::~BookEntry M51, M55, M58
BookEntry::BookEntry M51, M54, M55, M56, M58
BookEntry::cleanup M54, M55
BookEntry::initAudioClip M57
BookEntry::initImage M57
C1::~C1 M114
C1::C1 M114
C1::f1 M114
C1::f2 M114
C1::f3 M114
C1::f4 M114
C2::~C2 M114
C2::C2 M114
C2::f1 M114
C2::f5 M114
CallBack::CallBack M74
CallBack::makeCallBack M74
callBackFcn1 M75
callBackFcn2 M75
CantBeInstantiated::CantBeInstantiated M130
Cassette::Cassette M174
Cassette::displayTitle M174
Cassette::play M174
CatStack::empty E192, E193
CatStack::pop E192, E193
CatStack::push E192, E193
CD::CD M174
CD::displayTitle M174
CD::play M174
checkForCollision M229
Chicken::operator= M259, M260, M263, M265
CollisionMap::addEntry M249
CollisionMap::CollisionMap M249
CollisionMap::lookup M249
CollisionMap::removeEntry M249
CollisionMap::theCollisionMap M249
CollisionWithUnknownObject::CollisionWithUnknownObject M231
constructWidgetInBuffer M40
convertUnexpected M76
countChar M99
Counted::~Counted M142
Counted::Counted M142
Counted::init M142
Counted::objectCount M142
DataCollection::avg M94
DataCollection::max M94
DataCollection::min M94
DBPtr<T>::DBPtr M160, M161
DBPtr<T>::operator T* M171
deleteArray M18
Derived::operator= E69
Directory::Directory E220, E223
displayAndPlay M174, M177, M178
displayInfo M49, M50
doNothing E51
doSomething M69, M71, M72
drawLine M271, M272, M273
DynArray::operator[] M97
editTuple M161, M167
Empty::~Empty E213
Empty::Empty E213
Empty::operator& E213
encryptPassword E136
EnemyTank::~EnemyTank E60
EnemyTank::EnemyTank E60
EnemyTank::numberOfTanks E60
EnemyTarget::~EnemyTarget E59
EnemyTarget::EnemyTarget E59
EnemyTarget::numberOfTargets E59
EquipmentPiece::EquipmentPiece M19
f M3, M66
f1 M61, M73
f2 M61, M73
f3 M61
f4 M61
f5 M61
find M281, M282, M283
findCubicleNumber M95
freeShared M42
FSA::FSA M137
FSA::makeFSA M137
GameObject::collide M230, M233, M235, M242
GenericStack E191
GenericStack::StackNode::StackNode E191
Graphic::clone M126
Graphic::operator<< M128
Graphic::print M129
HeapTracked::~HeapTracked M154, M155
HeapTracked::isOnHeap M154, M155
HeapTracked::operator delete M154, M155
HeapTracked::operator new M154, M155
Image::Image M50
initializeCollisionMap M245, M246
IntStack::empty E192, E193
IntStack::push E192, E193
inventoryAsset M156
isSafeToDelete M153
Kitten::processAdoption M46
LargeObject::field1 M87, M88, M89, M90
LargeObject::field2 M87, M88
LargeObject::field3 M87, M88
LargeObject::field4 M87, M88
LargeObject::field5 M87
LargeObject::LargeObject M87, M88, M89
Lizard::operator= M259, M260, M261, M262, M263, M264, M265
LogEntry::~LogEntry M161
LogEntry::LogEntry M161
lookup M245, M247
main M111, M251, M274
makeBigger E159
makeStringPair M245, M246
mallocShared M42
ManyDataMbrs::init E56
ManyDataMbrs::ManyDataMbrs E56
max E16, E106
merge M172
ModelA::fly E165, E166
ModelB::fly E165, E166
ModelC::fly E165, E167
MusicProduct::displayTitle M173
MusicProduct::MusicProduct M173
MusicProduct::play M173
MyPerson::address E205
MyPerson::birthDate E205
MyPerson::name E205
MyPerson::nationality E205
MyPerson::valueDelimClose E205
MyPerson::valueDelimOpen E205
Name::Name M25
NamedPtr::NamedPtr E53
NamedPtr<T>::operator= E68
Natural::init E109
Natural::Natural E109
NewsLetter::NewsLetter M125, M127
NewsLetter::readComponent M125
NLComponent::clone M126
NLComponent::operator<< M128
NLComponent::print M129
noMoreMemory E27
normalize M170
numDigits E4
onHeap M150
operator const char* E126
operator delete E37, M41, M153
operator new E30, E32, E34, E36, M38, M40, M153
operator& E213
operator* E87, E102, E105, M102, M103, M104
operator+ E7, M100, M105, M106, M107, M108, M109
operator- M107, M108
operator<< E18, E88, M129
operator= E9, E66, E73, E74, E75, M6
for derived class E70
operator== M27, M31, M73
operator>> E88, M62
passAndThrowWidget M62, M63
Person::age E143
Person::makePerson E151
Person::name E149
Person::Person E148
PersonInfo::theName E203
PersonInfo::valueDelimClose E203
PersonInfo::valueDelimOpen E203
printBSTArray M17
printDouble M10
Printer::~Printer M135, M138, M143
Printer::makePrinter M138, M139, M140, M143
Printer::performSelfTest M130, M139, M143
Printer::Printer M131, M132, M135, M139, M140, M143
Printer::reset M130, M139, M143
Printer::submitJob M130, M139, M143
Printer::thePrinter M132
PrintingStuff::Printer::performSelfTest M132
PrintingStuff::Printer::Printer M133
PrintingStuff::Printer::reset M132
PrintingStuff::Printer::submitJob M132
PrintingStuff::thePrinter M132, M133
PrintJob::PrintJob M131
printMinimumValue E107
printNameAndDisplay E100, E101
printTreeNode M164, M165
processAdoptions M46, M47, M48
processCollision M245
processInput M213, M214
processTuple M171
Puppy::processAdoption M46
rangeCheck M35
Rational::asDouble M26
Rational::denominator M102, M225
Rational::numerator M102, M225
Rational::operator double M25
Rational::operator+= M107
Rational::operator-= M107
Rational::Rational M25, M102, M225
RCIPtr::~RCIPtr M209
RCIPtr::CountHolder M209
RCIPtr::CountHolder::~CountHolder M209
RCIPtr::init M209
RCIPtr::operator* M209, M210
RCIPtr::operator= M209, M210
RCIPtr::operator-> M209, M210
RCIPtr::RCIPtr M209
RCObject::~RCObject M194, M204, M205
RCObject::addReference M195, M204, M205
RCObject::isShareable M195, M204, M205
RCObject::isShared M195, M204, M205
RCObject::markUnshareable M195, M204, M205
RCObject::operator= M194, M195, M204, M205
RCObject::RCObject M194, M195, M204, M205
RCObject::removeReference M195, M204, M205
RCPtr::~RCPtr M199, M202, M203, M206
RCPtr::init M199, M200, M203, M206
RCPtr::operator* M199, M203, M206
RCPtr::operator= M199, M202, M203, M206
RCPtr::operator-> M199, M203, M206
RCPtr::RCPtr M199, M203, M206
RCWidget::doThis M210
RCWidget::RCWidget M210
RCWidget::showThat M210
realMain M274
RealPerson::RealPerson E150
RegisterCollisionFunction::RegisterCollisionFunction M250
restoreAndProcessObject M88
returnStudent E98, E99
reverse M36
satelliteAsteroid M251
satelliteShip M251
Session::~Session M59, M60, M61, M77
Session::logCreation M59
Session::logDestruction M59, M77
Session::Session M59, M61
Set<T>::cardinality E184
Set<T>::insert E184
Set<T>::member E184
Set<T>::remove E184
set_new_handler E30, E32
shipAsteroid M245, M248, M250
shipStation M245, M250
simulate M272, M273
SmartPtr<Cassette>::operator
SmartPtr<MusicProduct> M175
SmartPtr<CD>::operator
SmartPtr<MusicProduct> M175
SmartPtr<T>::~SmartPtr M160, M166
SmartPtr<T>::operator SmartPtr<U> M176
SmartPtr<T>::operator void* M168
SmartPtr<T>::operator! M169
SmartPtr<T>::operator* M160, M166, M176
SmartPtr<T>::operator= M160
SmartPtr<T>::operator-> M160, M167, M176
SmartPtr<T>::SmartPtr M160, M176
someFamousAuthor E127
someFunction M68, M69, M71
SpaceShip::collide M230, M231, M233, M234, M235, M237, M243
SpaceShip::hitAsteroid M235, M236, M243, M244
SpaceShip::hitSpaceShip M235, M236, M243
SpaceShip::hitSpaceStation M235, M236, M243
SpaceShip::initializeCollisionMap M239, M240, M241, M243
SpaceShip::lookup M236, M238, M239, M240
SpecialWindow::height M269
SpecialWindow::repaint M269
SpecialWindow::resize M269
SpecialWindow::width M269
Stack::~Stack E187
Stack::pop E187
Stack::push E187
Stack::Stack E187
Stack<T>::empty E194
Stack<T>::pop E194
Stack<T>::push E194
Stack<T>::StackNode::StackNode E186
stationAsteroid M245
stationShip M245
String::~String E50, M188
String::CharProxy::CharProxy M219, M222
String::CharProxy::operator char M219, M222
String::CharProxy::operator& M224
String::CharProxy::operator= M219, M222, M223
String::length E95, E96
String::markUnshareable M207
String::operator char* E94
String::operator const char* E126
String::operator= E9, E66, E73, E74, M183, M184, M189
String::operator[] E93, E126, M190, M191, M194, M204, M207, M218, M219, M220, M221
String::String E8, E50, M183, M187, M188, M193, M204, M207
String::StringValue::~StringValue M186, M193, M197, M204, M207
String::StringValue::init M204, M206
String::StringValue::StringValue M186, M193, M197, M201, M204, M206, M207
swap M99, M226
tempDir E223
testBookEntryClass M52, M53
TextBlock::clone M126
TextBlock::operator<< M128
TextBlock::print M129
theFileSystem E222
thePrinter M130, M131, M134
Tuple::displayEditDialog M161
Tuple::isValid M161
TupleAccessors::TupleAccessors M172
TVStation::TVStation M226
twiddleBits M272, M273
update M13
updateViaRef M14
UPInt::operator-- M32
UPInt::operator++ M32, M33
UPInt::operator+= M32
UPInt::UPInt M105
UPNumber::~UPNumber M146
UPNumber::destroy M146
UPNumber::operator delete M157
UPNumber::operator new M148, M157
UPNumber::UPNumber M146, M148
uppercasify M100
Validation_error::what M70
Wacko::Wacko E58
watchTV M227
Widget::~Widget M210
Widget::doThis M210
Widget::operator= M210
Widget::showThat M210
Widget::Widget M40, M210
Window::height M269
Window::repaint M269
Window::resize M269
Window::width M269
WindowHandle::~WindowHandle M49
WindowHandle::operator WINDOW_HANDLE M49
WindowHandle::operator= M49
WindowHandle::WindowHandle M49
X::operator new E38
example uses
__cplusplus M273
auto_ptr M48, M57, M138, M164, M165, M240, M247, M257
const pointers M55
const_cast M13, M90, M221
dynamic_cast M14, M155, M243, M244, M261, M262
exception specifications M70, M73, M74, M75, M77
explicit E86, M29, M291, M293
find template M283
implicit type conversion operators M25, M49, M171, M175, M219, M225
in-class initialization of const static members M140
list template M51, M124, M154, M283
make_pair template M247
map template M95, M238, M245
member templates E111, M176, M291, M292, M293
mutable E96, M88
namespace E108, E118, E119, M132, M245, M246, M247
nested class using inheritance M197
operator delete M41, M155
operator delete[] M21
operator new M41, M155
operator new[] M21
operator& M224
operator->* (built-in) M237
pair template M246
placement new M21, M40
pointers to member functions M236, M238
pure virtual destructors M154, M194
reference data member M219
refined return type of virtual functions M126, M260
reinterpret_cast M15
setiosflags M111
setprecision M111
setw M99, M111
Standard Template Library (STL) M95, M125, M127, M155, M238, M247, M283, M284
static_cast M12, M18, M21, M28, M29, M231
typeid M231, M238, M245
using declarations E119, M133, M143
using directive E118, E119
vector template M11
exception class M66, M77
exception specifications E78, M72-M78
advantages M72
callback functions and M74-M75
checking for consistency M72
cost of M79
default behavior when violated E28
layered designs and M77
libraries and M76, M79
mixing code with and without M73, M75
templates and M73-M74
exception::what M70, M71
exceptions E135, M287
see also catch, throw
causing resource leaks in constructors M52
choices for passing M68
destructors and M45
disadvantages M44
efficiency M63, M65, M78-M80
iostreams and E228
leading to unused objects E135
mandatory copying M62-M63
modifying throw expressions M63
motivation M44
operator new and M52
optimization M64
recent revisions to M277
rethrowing M64
specifications, see exception specifications
standard E231, M66, M70
type conversions and M66-M67
unexpected, see unexpected exceptions
use of copy constructor M63
use to indicate common conditions M80
virtual functions and M79
vs. setjmp and longjmp M45
explicit E67, E78, E85, M28-M31, M227, M294
see also example uses
explicit qualification of names E30, E162
see also namespaces
virtual functions and E196
extent, of class E59
extern "C" M272-M273

F

facets, in standard C++ library E230
factory functions E149, E201
fake this M89
false E9, M3
Felix the Cat M123
fetch and increment M32
fetching, lazy M87-M90
field delimiters, implemented via virtual functions E202
Fields, Lorri Mxv
find algorithm E184, E230, M283
first fit M67
fixed-format I/O M112
Fleming, Read Exix, Mxiii
<float.h> E107
for_each algorithm E230
formatting, in iostreams E229
forms for new casts E10 -E11
Forth M271
FORTRAN E17, E61, E231, M213, M215, M271, M288
forwarding functions E148
Franklin, Dan Exviii
free M42, M275
combining with delete E20
destructors and E19-E20
free implementation of Standard Template Library (STL) M4
French, Donald Exvii, Mxv
French, gratuitous use of E149, E220, M177, M185
friend functions E87-E88
interfaces and E83
friends, avoiding M108, M131
friendship, in real life E87
Frohman, Scott Exix
fstream class M278
FTP site for More Effective C++ M8
see also Web sites
FUDGE_FACTOR E15
fully constructed objects M52
function calls
mechanics of E132
returning a result from E132
semantics of M35-M36
functional abstraction E89-E90
functions
see also function calls, inline functions, virtual functions
adding at runtime M287
C, and name mangling M271
callback M74-M75, M79
declaring E4
defining E4
deliberately not defining E116
factory E149, E201
for type conversions M25, M31
forwarding E148
friend, see friend functions
global vs. member E84-E87
implicitly generated E212-E216
lifetime of return values E127-E128
member template, see member templates
member, see member functions
nonvirtual, meaning E167, E211
references to E121
return types, see return types
return values, modifying E94
simple virtual, meaning E211
static, via inlining E139
type conversions and E86
virtual, see virtual functions
future tense programming M252-M258

G

Gajdos, Larry Exviii
Gamma, Erich M288, M289
garbage collection M183, M212
generalizing code M258
generic (void*) pointers E110, E189, E191 -E194
private inheritance and E193
type safety and E192
German, gratuitous use of M31
Gibson, Paul Exix
global functions, vs. member functions E84 -E87
global overloading of operator new/delete M43, M153
goddess, see Urbano, Nancy L.
Gokul, Chandrika Exix
Gootman, Alexander Exviii
GUI systems M49, M74, M75
Guzikowski, Chris Mxv

H

halting problem E221
Hamlet, allusion to E133, M22, M70, M252
Hamlet, quotation from E11
Handle/Body classes E146-E149
handles
dangling E128
object lifetimes and E127-E128
to inaccessible members E124, E126
Hansen, Tony Exix
Harrington, John Exix
has-a relationship, definition (English) E182
hash tables, standard C++ library and E229
Hastings, Battle of E154
head scratching, avoiding E89
header files
see also headers
inlining and E138
length, and compilation speed E80
name conflicts and E117
standard names E225-E226
vs. namespaces E119
headers
see also header files
<assert.h> E26
<cassert> E26
<complex> E225
<complex.h> E225
<cstdio> E225, E226
<cstdlib> E127
<cstring> E225, E226
<float.h> E107
<iomanip> M111
<iostream> E225, E226
<iostream> vs. <iostream.h> E19
<iostream.h> E225
<limits> E107
<limits.h> E107, E225
<math> M65
<math.h> M65
<new> E27, M40
<new.h> M40
<stdio.h> E17-E18, E225, E226
<stdlib.h> E127
<string> E226
<string.h> E20, E225, E226
heap objects, see objects
Helm, Richard M288, M289
Hennessy, John L. Mxi
heuristic for vtbl generation M115
hiding class implementations E146-E152
hit rate, cache, inlining and E137
Hobbs, Bryan Mxiv
Hoeren, Gerd Mxiii
Horstmann, Cay Mxiii, Mxiv
Huchital, Jill Exix, Mxiii

I

identifying abstractions M267, M268
identity, see object identity
idioms M123
if statements
defining variables in E181
vs. virtual functions E176
#ifdef E16
#ifndef E16
Iliad, Homer's M87
implementation
of + in terms of +=, etc. M107
of libraries M288
of multiple dispatch M230-M251
of operators ++ and -- M34
of pass-by-reference M242
of pure virtual functions M265
of references M242
of RTTI M120-M121
of virtual base classes M118-M120
of virtual functions M113-M118
implementations
decoupling from interfaces E164
default, danger of E163-E167
hiding E146-E152
inheritance of E161-E169
of derived class constructors and destructors E141
of Protocol classes E151
implicit conversions, see type conversions
implicit type conversion operators, see type conversion operators
implicit type conversions, see type conversions
implicitly generated functions E212-E216
importing namespace elements E118-E119
#include directives E16
compilation dependencies and E144, E148
include files, see header files
incorrect code, efficiency and E101, E124, E129, E131
increment and fetch M32
increment operator, see operator++
indexing, array
inheritance and M17-M18
pointer arithmetic and M17
infinite loop, in operator new E35
inheritance
see also multiple inheritance, public inheritance, private inheritance
abstract classes and M258-M270
accessibility restrictions and E115
accidental E164-E165
advantages of E164
catch clauses and M67
combining with templates E31-E33, E193
common features and E164, E208
concrete classes and M258-M270
copy constructors and E71
delete and M18
emulated vtbls and M248-M249
intuition and E156-E160
libraries and M269-M270
mathematics and E160
nested classes and M197
of implementation E161-E169
of interface E161-E169
of interface vs. implementation E161-E169
operator delete and M158
operator new and E35-E36, M158
operator= and E69-E70
penguins and birds and E156-E158
private constructors and destructors and M137, M146
protected E156
public, see public inheritance
rectangles and squares and E158-E160
redefining nonvirtual functions and E169-E171
sharing features and E164, E208
smart pointers and M163, M173-M179
type conversions of exceptions and M66
vs. templates E185-E189
when to use E189
initialization
see also initialization order
definition (English) E8
demand-paged M88
of arrays via placement new M20-M21
of const pointer members M55-M56
of const static members E14, M140
of emulated vtbls M239-M244, M249-M251
of function statics M133
of members, see member initialization
of objects E8, M39, M237
of pointers M10
of references M10
of static members E14, E29, E57, E58, M140
of static objects inside functions E222
of static pointers to null E43
static M273-M275
via memberwise copy E213
virtual bases and E200
vs. assignment E8-E9, E136
for built-in types E56
maintenance and E55
with vs. without arguments E136
initialization order
importance of E221
in a hierarchy E58
of non-local static objects E18, E221-E223, M133
inline functions
see also inlining
address of E140
as hint to compiler E138
code replication and E139
code size and E137
debuggers and E142
in More Effective C++ M7
optimizing compilers and E137
recursion and E138
that aren't inlined E138-E139, E223
thrashing and E137
treated as static E139
vs. #define E15-E16
vs. macros, efficiency and E16
inlining E137-E143
see also inline functions
architecture-dependence of E143
compiler warnings and E143
constructors/destructors and E140-E142
dynamic linking and E142
function statics and M134
Handle classes and E152
header files and E138
in More Effective C++ M7
inheritance and E140-E142
library design and E142
Protocol classes and E152
recompiling and E142
relinking and E142
return value optimization and M104
virtual functions and E138
"virtual" non-member functions and M129
vtbl generation and M115
when not done E138
inner products E231
insomnia E154
instantiations, of templates M7
INT_MIN E107
integral members, initialization when static and const E14
integral types E15
interface classes E192
efficiency of E194
interfaces
complete E79, E184
decoupling from implementations E164
design considerations E77-E78
design example E81-E83
friend functions and E83
in Java E200
inheritance of E161-E169
minimal E79-E81, E184
type-safe E192-E194
vs. implementations E144
internal linkage M134
International Standard for Information Systems — Programming Language C++ E234
internationalization
standard C++ library and E230
standard iostreams and E228
Internet Engineering Task Force, The Exx
Internet sites, see Web sites
invalid_argument class M66
invariants over specialization E167
iostream class M278
iostreams E17-E18, M280
conversion to void* M168
exceptions and E228
fixed-format I/O and M112
in standard C++ library E226, E228
internationalization and E228
<iostream>
vs. <iostream.h> E19
<iostream> header E225, E226
<iostream.h> header E225
operator! and M170
standard vs. traditional E228
vs. stdio E17-E18, M110-M112
isa relationship, definition (English) E155
is-implemented-in-terms-of relationship E182, E190, E193, E194, E208
definition (English) E183
ISO/ANSI standardization committee M2, M59, M96, M256, M277
ISO/IEC JTC1/SC22/WG21 E234
istream typedef E226
iterators E184, M283
see also Standard Template Library
example use E175, E176, E178, E179, E180, E181, E184
in standard library E232
operator-> and M96
vs. pointers M282, M284

J

Jackson, Jeff Mxiv
Japanese, gratuitous use of M45
Java E47, E146, E195
interfaces in E200
Johnson, Ralph M288, M289
Johnson, Tim Exix, Mxiii, Mxv

K

Kaelbling, Mike Exviii, Exix
Kanze, James Mxii, Mxiii
Kernighan, Brian Exviii, Exix, Mxi, Mxii, Mxiii, M36
Kimura, Junichi Exix
King, Stephen E127
Kini, Natraj Exix
Kirk, Captain, allusion to M79
Kirman, Jak Exix
Klingon E97
Knauss, Frieder Exix
Knuth, Donald Exv
Koenig, Andrew Mxii
Koffman, Dawn Exix
Kreft, Klaus Exviii, Mxiii
Kühl, Dietmar Exvii
Kuhlins, Stefan Exix
Kuplinsky, Julio Exviii

L

Lakos, John Exviii, Exix
Langer, Angelika Exviii
Langlois, Lana Exx, Mxiv
language lawyers M290
languages, other, compatibility with E61
Large-Scale C++ Software Design Exviii
Latin, gratuitous use of M203, M252
layering E182-E185
compilation dependencies and E185
meanings of E182, E211
vs. private inheritance E190-E194
lazy construction M88-M90
lazy evaluation M85-M93, M94, M191, M219
conversion from eager M93
object dependencies and M92
when appropriate M93, M98
lazy fetching M87-M90
Lea, Doug Exvii, Exix
leaks
memory, see memory leaks
resource, see resource leaks
Lehrer, Tom, allusion to E3, E58
Lejter, Moises Exix
lemur, ring-tailed E203
length_error class M66
Lewandowski, Scott Exix
lhs, as parameter name E11, M6
libraries
design and implementation M110, M113, M284, M288
exception specifications and M75, M76, M79
impact of modification M235
inheriting from M269-M270
iostream E17-E18, E228
multiple inheritance and E198
potential ambiguity and E114, E116
standard, for C E18, E28, E224, E226, E228, E230
standard, for C++, see standard C++ library
Liebelson, Jerry Exix
lifetime
of function return values E127-E128
of temporary objects M278
limitations on type conversion sequences M29, M31, M172, M175, M226
limiting object instantiations M130-M145
<limits> E107
<limits.h> E107, E225
linkage
C M272
internal M134
linkers, and overloading M271
link-time errors E14, E64, E117, E139, E219
vs. runtime errors E216
lint-like programs for C++ Exiii
Linton, Mark Exviii
LISP E65, E195, E216, M93, M230, M271
list template E174, E183, E184, E229, M4, M51, M124, M125, M154, M283
local objects
construction and destruction E131
static E222
locales, in standard C++ library E230
locality of reference M96, M97
localization, support in standard C++ library M278
logic_error class E135, E231, M66
long int, as NULL E111
longjmp
destructors and M47
setjmp and, vs. exceptions M45
Love-Jensen, John Exix
LSD M287
Lutz, Greg Exix
lvalue, definition M217
lying to compilers M241

M

Madagascar E204
see also lemur, ring-tailed
magazines
C Users Journal Mxiii
C++ Report Exvii, Exviii, Mxii, Mxiii, Mxv, M287, M289
C/C++ Users Journal Exviii, Mxiii, M289
recommended M289
magic numbers E108
main M251, M273, M274
maintenance M57, M91, M107, M179, M211, M227, M253, M267, M270, M273
adding class members and E24
common base classes and E164
downcasting and E176
large class interfaces and E80
member initialization lists and E55
references to functions and E120
RTTI and M232
the lure of multiple inheritance and E209
make_pair template M247
malloc M39, M42, M275
combining with new E20
constructors and E19-E20, M39
operator new and M39
Mangoba, Randy Exix
map template E229, M4, M95, M237, M246, M283
Martin, Robert Exviii
mathematics, inheritance and E160
max E16
McCluskey, Peter Exix
McKee, Beth Mxv
meaning
of classes without virtual functions E61
of common base classes E210
of layering E182, E211
of nonvirtual functions E167, E211
of pass-by-value E7
of private inheritance E190, E210
of public inheritance E155, E210
of pure virtual functions E162, E211
of references E102
of simple virtual functions E163, E211
of undefined behavior E20
of virtual base classes E199
Medusa E75
Meltzer, Seth Exix
member
assignment E213
copying E213
data, see data members
initialization order E58
initialization when static, const, and integral E14
pointers (i.e., pointers to members) E112, E130
static, initialization E29
templates E111
for implementing NULL E111-E112
member function templates
see member templates
member functions
see also functions, member templates
bitwise const E94
compatibility of C++ and C structs and M276
conceptually const E95-E97
const E92-E97, M89, M160, M218
handles and E128
handles and E128
implicitly generated E212-E216
invocation through proxies M226
pointers to E130, M240
private E57, E116
protected E165, E193
type conversions and E86
vs. global functions E84-E87
member initialization E213
see also member initialization lists
of const members E53-E54
of const static integral members E14
of reference members E53-E54
order E58
vs. assignment E53-E57
member initialization lists M58
see also member initialization
?: vs. if/then and M56
base class constructors and E200
const members and E53-E54
reference members and E53-E54
try and catch and M56
member templates M165
approximating M294
assigning smart pointers and M180
copying smart pointers and M180
for type conversions E111, M175-M179
portability of M179
memberwise assignment E213
memberwise copy construction E213
memory allocation M112
see also memory management
arrays and E36
error handling for E27-E33
for basic_string class M280
for heap arrays M42-M43
for heap objects M38
in C++ vs. C M275
memory layout of objects E198
memory leaks E25, E125, E133, M6, M7, M42, M145
see also resource leaks
examples E51, E103
origin E45
vs. memory pools E44-E45
memory management
see also memory allocation, operator new, operator delete
custom, efficiency and E43
customizing M38-M43
memory pools E46-E48
memory values, after calling operator new M38
memory, shared M40
memory-mapped I/O M40
message dispatch, see multiple dispatch
mf, as identifier E12
MI, see multiple inheritance
Michaels, Laura Exix
migrating from C to C++ M286
minimal interfaces E184
pros and cons E79-E81
minimizing compilation dependencies E143-E152
minimum values, discovering
Mitchell, Margaret E127
mixed-mode arithmetic E85, E86
mixed-type assignments M183, M260, M261
prohibiting M263-M265
mixed-type comparisons M169
mixin classes E31, M154
mixing code
C++ and C M270-M276
with and without exception specifications M75
mixing new/delete and malloc/free E20
mixin-style base classes E31, M154
mixin-style inheritance E31, M154
modifying function return values E94
Moore, Doug Exix
More Effective C++ Exv, E237-E238
vs. Effective C++ E237
Web site for E237, M8
Morgan, Doug Exviii, Exix
multi-dimensional arrays M213-M217
multi-methods M230
multiple dispatch M230-M251
multiple inheritance (MI) E194-E209, M153
ambiguity and E114-E115, E195, E200
clairvoyance and E199
class initialization order and E58
combining public and private E201-E205
complexities of E195-E201
controversy over E194
diamonds and E198 -E201
dominance and E200
libraries and E198
memory layout E198
object addresses and M241
poor design and E205-E209
space penalty for use of E199
vptrs and vtbls and M118-M120
multiple pointers, destructors and E191
Munsil, Wesley Exix
Murray, Rob Exviii, Mxii, Mxiii, M286
mutable E95, M88-M90
Myers, Nathan Exviii

N

Nackman, Lee R. M288
Nagler, Eric Exix, Mxiii, Mxiv
Naiman, Aaron Exix
name conflicts E117
name function M238
name mangling M271-M273
named objects M109
optimization and M104
vs. temporary objects M109
namespace pollution
avoiding E150
in a class E166
namespaces E117-E119, M132, M144
approximating E119-E122
potential ambiguity and E119
standard C++ library and M280
std, see std namespace
unnamed M246, M247
naming conventions E11, E138, E144
NDEBUG, and assert macro E26
Nemeth, Evi Exx
Neou, Vivian Mxiv
nested classes, and inheritance M197
nested types, examples E186, E218
<new> E27
new
see also operator new, placement new
combining with malloc E20
communication with delete E40
consistency with delete E43
example implementation E30, E32
forms of E26
hiding global new E37-E39
nothrow E33
operator new and E23
relationship to constructors E23
new cast examples
const_cast E96, E97, E124
dynamic_cast E180, E181
static_cast E19, E42, E44, E70, E110, E114, E175, E176, E178, E192, E193, E194
new cast forms E10-E11
new language features, summary M277
new operator M37, M38, M42
bad_alloc and M75
operator new and constructors and M39, M40
operator new[] and constructors and M43
new/delete, vs. vector and string E229
new-handler
definition (English) E26
deinstalling E28
discovering E35
finding out what it is E35
new-handling functions, behavior of E27
newsgroups, Usenet Exvii, Exviii, Mxi, M289
recommended M289
Newton, allusion to M41
Nguyen, Dat Thuc Exix
nightmares, maintenance E176
non-local static objects E120, E221
non-member functions, acting virtual M128-M129
nonvirtual
base classes E200
destructors E81
object deletion and E59-E63
functions E169-E171
meaning E211
static binding of E170
nothrow new E33
NULL E110-E113
address of E112
use by caller vs. use by callee E112
null pointers
deleting E25, E36, M52
dereferencing M10
dynamic_cast and M70
in smart pointers M167
set_new_handler and E28
strlen and M35
testing for M10
the STL and M281
null references M9-M10
numeric applications M90, M279
support in standard C++ library E231
numeric_limits E106-E108
efficiency of E107
nuqneH E97
Nyman, Lars Exix

O

Object Pascal E195
Objective C E195
object-oriented design E153-E211
advantages of E164
common errors in E167-E169
objects
addresses M241
allowing exactly one M130-M134
arrays of E5-E6
as function return type M99
assignments E8
through pointers M259, M260
compilation dependencies and E147
construction
contexts for M136
lazy M88-M90
on top of one another M287
copying, and exceptions M62-M63, M68
counting instantiations E59, M141 -M145
declaring E4
defining E4, E135-E137
constructors and E135
deleting M173
determining location via address comparisons M150-M152
determining whether on the heap M147-M157
equality of E74-E75
identity of E74-E75
initialization E8, M39, M88, M237
with vs. without arguments E136
layout E198
lifetime when returned from functions E127-E128
limiting the number of M130-M145
locations M151
memory layout diagrams M116, M119, M120, M242
modifying when thrown M63
named, see named objects
ownership M162, M163-M165, M183
partially constructed M53
phases of construction E54
preventing instantiations M130
prohibiting copying of E52
prohibiting from heap M157- M158
proxy, see proxy objects
restricting to heap M145-M157
size
cache hit rate and M98
determining E145
paging behavior and M98
small, passing E101
static, see static objects
surrogate M217
temporary, see temporary objects
unnamed, see temporary objects
using dynamic_cast to find the beginning M155
using to prevent resource leaks M47-M50, M161
virtual functions and M118
vs. pointers, in classes M147
Occam, William of E207, E209
off-by-one errors E83
On Beyond Zebra, allusion to M168
on-line errata list
for Effective C++ Exvi
for More Effective C++ M8
operator delete E77, M37, M41, M84, M113, M173
see also delete, operator delete[]
behavior of E36-E37
efficiency and E39, M97
inheritance and M158
non-member, pseudocode for E36
virtual destructors and E44
operator delete[] E36, E37, E77, M37, M84
delete operator and destructors and M43
private M157
operator new E77, M37, M38, M69, M70, M84, M113, M149
see also new, operator new[]
arrays and E36
bad_alloc and E26, E33, E34, M75
behavior of E33-E36
calling directly M39
constructors and M39, M149-M150
efficiency and E39, M97
exception specification for E28
exceptions and M52
improving performance E40-E48
infinite loop within E35
inheritance and E35-E36, M158
malloc and M39
member, and "wrongly sized" requests E35
new operator and constructors and M40
new-handling functions and E27
non-member, pseudocode for E34
out-of-memory conditions and E25-E33
overloading E26, M43, M153
private M157
returning 0 and E33
std::bad_alloc and E26, E33, E34
values in memory returned from M38
zero-byte requests and E34
operator new[] E36, E77, M37, M42, M84, M149
see also new, operator new
bad_alloc and M75
new operator and constructors and M43
private M157
operator overloading, purpose M38
operator void* M168-M169
operator! M37
in iostream classes M170
in smart pointers classes M169
operator!= M37
operator% M37
operator%= M37
operator& E212, M37, M74, M223
operator&& M35-M36, M37
operator&= M37
operator() M37, M215
operator* M37, M101, M103, M104, M107
as const member function M160
null smart pointers and M167
STL iterators and M96
operator*= M37, M107, M225
operator+ M37, M91, M100, M107, M109
template for M108
operator++ M31-M34, M37, M225
double application of M33
prefix vs. postfix M34
operator+= M37, M107, M109, M225
operator, M36-M37
operator- M37, M107
template for M108
operator-= M37, M107
operator-> M37
as const member function M160
STL iterators and M96
operator->* M37
operator-- M31-M34, M37, M225
double application of M33
prefix vs. postfix M34
operator. M37, M226
operator.* M37
operator/ M37, M107
operator/= M37, M107
operator:: M37
operator< M37
operator<< M37, M112, M129
declaring E87
vs. printf E17
why a member function M128
writing E17
operator<<= M37, M225
operator<= M37
operator= E64-E76, E116, M37, M107, M268
associativity of E64
bitwise copy and E50, E213
classes with pointers and M200
const members and E214-E216
const return type and E65
default implementation E50, E213
default signature of E65
derived classes and M263
impact on interfaces E82
implicit generation E212
inheritance and E69-E70, M259-M265
memberwise assignment and E213
mixed-type assignments and M260, M261, M263-M265
non-const parameters and M165
overloading E65
partial assignments and M259, M263-M265
pointer members and E50-E51
prohibiting use of E52
reference members and E214-E216
return type E65
smart pointers and M205
virtual M259-M262
void return type and E65
when not implicitly generated E214-E216
operator== M37
operator> M37
operator>= M37
operator>> M37
declaring E87
vs. scanf E17
operator>>= M37
operator?: M37, M56
operator[] M11, M37, M216
const vs. non-const M218
distinguishing lvalue and rvalue use M87, M217-M223
example declaration E82
overloading on const E92-E93
return type of E93
returning handle E126
operator[][] M214
operator^ M37
operator^= M37
operator| M37
operator|= M37
operator|| M35-M36, M37
operator~ M26, M37
operators
implicit type conversion, see type conversion operators
not overloadable M37
overloadable M37
returning pointers M102
returning references M102
stand-alone vs. assignment versions M107-M110
operators, overloaded, namespace approximations and E121
optimization E99, E105, E231
see also costs, efficiency
inline functions and E137
of exceptions M64
of reference counting M187
of vptrs under multiple inheritance M120
profiling data and M84
return expressions and M104
return value, see return value optimization
temporary objects and M104
via valarray objects M279
order of examination of catch clauses M67-M68
order of initialization, see initialization order
ostream typedef E226
other languages, compatibility with E61
Ouija boards M83
out_of_range class M66
over-eager evaluation M94-M98
overflow_error class M66
overloadable operators M37
overloading
enums and M277
function pointers and M243
linkers and M271
on const E92-E93
operator new/delete at global scope M43, M153
resolution of function calls M233
restrictions M106
to avoid type conversions M105-M107
user-defined types and M106
vs. default parameters E106-E109
ownership of objects M162, M183
transferring M163-M165

P

Paielli, Russ Mxiii
pair template M246
Pandora's box E195
Papurt, David Exviii, Exix
parameter lists, type conversions and E86
parameters
see also pass-by-value, pass-by-reference, passing small objects
default, see default parameters
passing, vs. throwing exceptions M62-M67
type conversions and, see type conversions
unused M33, M40
partial assignments M259, M263-M265
partial computation M91
partial sums E231
partially constructed objects, and destructors M53
Pascal E57, E176
pass-by-pointer M65
pass-by-reference E99-E101
auto_ptrs and M165
const and M100
efficiency and E99
exceptions and efficiency and M65
implementation M242
temporary objects and M100
the STL and M282
type conversions and M100
pass-by-value E98
auto_ptrs and M164
copy constructors and E6, E98-E99
efficiency of E98-E99
exceptions and efficiency and M65
meaning of E7
the STL and M282
virtual functions and M70
passing exceptions M68
passing small objects E101
pathological behavior, custom memory management and E46
patterns M123, M288
Patterson, David A. Mxi
Pavlov, allusion to M81
Payment, Simone Mxiv
penguins and birds E156 -E158
performance, see costs, efficiency, optimization
Persephone Exx, E215, Mxv
phases of construction E54
placement new M39-M40
array initialization and M20-M21
delete operator and M42
Plato E98
pointer arithmetic
array indexing and M17
inheritance and M17 -M18
pointer members
see also pointers
copy constructors and E51-E52
operator= and E50-E51
pointers
see also pointer members
as parameters, see pass-by-pointer
assignment M11
bitwise const member functions and E94
circumventing access restrictions and E129-E131
compilation dependencies and E147
const E91, M55
in header file E14
to functions E121
dereferencing when null M10
determining whether they can be deleted M152-M157
dumb M159
for building collections E191
generic, see generic (void*) pointers
implications for copy constructors and assignment operators M200
initialization M10, M55-M56
into arrays M280
multiple, and destructors E191
null, see null pointers
object assignments and M259, M260
proxy objects and M223
replacing dumb with smart M207
returning from operators M102
smart, see smart pointers
testing for nullness M10
to functions M15, M241, M243
vs. references to functions E121
to member functions E130, M240
to members E112
to pointers, vs. references to pointers E13
to single vs. multiple objects, and delete E23, E52
virtual functions and M118
void*, see generic (void*) pointers
vs. iterators M284
vs. objects, in classes M147
vs. references M9-M11
when to use M11
Polonius, quotation from E11
polymorphism, definition M16
Pool class E46-E48
poor design
code reuse and E206-E209
MI and E205-E209
Poor Richard's Almanac, allusion to M75
Poor, Robert Exix
portability
non-standard functions and M275
of casting function pointers M15
of determining object locations M152, M158
of dynamic_cast to void* M156
of member templates M179
of passing data between C++ and C M275
of reinterpret_cast M14
of static initialization and destruction M274
potential ambiguity E113-E116
namespaces and E119
prefetching M96-M98
prefixes, for names in libraries E117
relation to namespaces E117
preprocessor E26, E110
preventing object instantiation M130
principle of least astonishment M254
printf M112
vs. operator<< E17
priority_queue template M283
private constructors E218
private inheritance E189-E194, M143
for redefining virtual functions E204
generic (void*) pointers and E193
meaning E190, E210
vs. layering E190-E194
private member functions E57, E116
profiling, see program profiling
program profiling M84-M85, M93, M98, M112, M212
programming in the future tense M252-M258
prohibiting
assignment E52
copying E52
protected
inheritance E156
member functions E165, E193
protected constructors and destructors M142
Protocol classes E149-E152, E173, E201
proxy classes M31, M87, M190, M194, M213-M228
see also proxy objects
definition M217
limitations M223 -M227
proxy objects
see also proxy classes
++, --, +=, etc. and M225
as temporary objects M227
member function invocations and M226
operator. and M226
passing to non-const reference parameters M226
pointers and M223
pseudo-constructors M138, M139, M140
pseudo-destructors M145, M146
public inheritance, meaning of E155, E210
pun, really bad E157
pure virtual destructors E63-E64, M195, M265
see also destructors, pure virtual functions
defining E63
implementing E63
inline E64
pure virtual functions E63, E197, M154
see also virtual functions, pure virtual destructors
defining E162, E166-E167
meaning E162, E211, M265
push_back algorithm E184
Python, Monty, allusion to M62

Q

queue template E229, M4, M283

R

Rabinowitz, Marty Exx, Mxiv
rand E127
range_error class M66
read-only libraries, downcasting and E179
recommended reading
books M285-M289
magazines M289
on exceptions M287
Usenet newsgroups M289
recompilation, impact of M234, M249
rectangles and squares E158-E160
recursive functions, inlining and E138
recycling E131
redeclaring virtual functions E189
redefining
inherited nonvirtual functions E169-E171
virtual functions E196-E197
Reed, Kathy Exvii, Mxv
Reeves, Jack Exvii
reference counting E52, M85-M87, M171, M183-M213, M286
assignments M189
automating M194-M203
base class for M194-M197
constructors M187-M188
cost of reads vs. writes M87, M217
design diagrams M203, M208
destruction M188
efficiency and M211
for standard strings E229
implementation of String class M203-M207
operator[] M190-M194
optimization M187
pros and cons M211-M212
read-only types and M208-M211
shareability and M192-M194
smart pointer for M198-M203
when appropriate M212
references
see also pass-by-reference
as function return types E99-E101
as handle to inaccessible
members E126
as members E53-E54
as operator[] return type M11
assignment to M11
casting to E70
circumventing access restrictions and E129-E131
compilation dependencies and E147
constructors and M165
implementation E101, M242
mandatory initialization M10
meaning E102
null M9-M10
returning from operators M102
to functions E121
vs. pointers to functions E121
to locals, returning M103
to pointers, vs. pointers to pointers E13
to static object, as function return value E103-E105
virtual functions and M118
vs. pointers M9-M11
when to use M11
refined return type of virtual functions M126
Regen, Joel Exviii
register E138
reinterpret_cast E10, M14-M15, M37, M241
Reiss, Steve Exix
relationships
among delete operator, operator delete, and destructors M41
among delete operator, operator delete[], and destructors M43
among new operator, operator new, and constructors M40
among new operator, operator new[], and constructors M43
among operator+, operator=, and operator+= M107
between operator new and bad_alloc M75
between operator new[] and bad_alloc M75
between terminate and abort M72
between the new operator and bad_alloc M75
between unexpected and terminate M72
has-a E182
isa E155-E158
is-implemented-in-terms-of E182, E183, E190, E193, E194, E208
replacing definitions with declarations E147
replication of code M47, M54, M142, M204, M223, M224
avoiding E109, E191-E193
replication of data under multiple inheritance M118-M120
reporting bugs
in Effective C++ Exv
in More Effective C++ M8
reporting bugs in More Effective C++ M8
research into lint-like programs for C++ Exiii
resolution of calls to overloaded functions M233
resource leaks M46, M52, M69, M102, M137, M149, M173, M240
definition M7
exceptions and M45-M58
in constructors M52, M53
preventing via use of objects M47-M50, M58, M161
smart pointers and M159
vs. memory leaks M7
restrictions
on accessibility under inheritance E115
on classes with default constructors M19-M22
rethrowing exceptions M64
return expression, and optimization M104
return type
const E92, E125, M33-M34, M101
handle to inaccessible members E124
objects M99
of operator-- M32
of operator++ M32
of operator= E65
of operator[] E93, M11
of smart pointer dereferencing operators M166
of virtual functions M126
reference as M103
temporary objects and M100-M104
return value optimization M101-M104, M109
return values, lifetime of E127-E128
return-by-value E98
copy constructors and E6
reuse, see code reuse
reusing custom memory management strategies E46-E48
Rhodes, Neil Exix
rhs, as parameter name E11, M6
rights and responsibilities M213
Ritchie, Dennis M. Exviii, M36
Rodoni, Rene Exix
Romeo and Juliet, allusion to E104, M166
Rooks, Alan Exix
Rosenthal, Steve Mxiii
rotate algorithm E230
Roux, Cade Exix
Rowe, Robin Mxiii
RTTI M6, M261-M262
implementation M120-M121
maintenance and M232
virtual functions and M120, M256
vs. virtual functions M231-M232
vtbls and M120
rule of 80-20 E143, E168
Rumsby, Steve Mxiv
runtime errors E110, E157
converting to compile-time errors E217-E219
in C or C++ E216
standard C++ library and E231
vs. compile-time errors E216
vs. link-time errors E216
runtime type identification, see RTTI
runtime_error class E231, M66
rvalue, definition M217

S

safe casts M14
safe downcasting E179 -E181
Saks, Dan Mxi, Mxiii, Mxiv
sanity checking, eliminating E217
Santos, Eugene, Jr. Exix
Satyricon Ei
scanf, vs. operator>> E17
Scarlet Letter, The, allusion to M232
Scientific and Engineering C++ M288
scoping E30, E162
see also namespaces
Scott, Roger Exviii, Exix
search algorithm E230
second edition of Effective C++, changes for Exiv-Exv
self, assignment to E71-E73
Sells, Chris Mxiii, Mxiv
semantics of function calls M35-M36
separate translation, impact of E233
separating interfaces and implementations E146-E152
sequences of type conversions M29, M31, M172, M175, M226
sequences, in standard C++ library E230
set template E182, E229, M4, M283
set_new_handler E27-E33
class-specific, implementing E28-E33
vs. try blocks E33
set_unexpected M76
setiosflags, example use M111
setjmp and longjmp, vs. exceptions M45
setprecision, example use M111
setw, example uses M99, M111
Shakespeare, William, quotation from E11
shared memory M40
sharing common features E164, E208
sharing values M86
see also reference counting
Shewchuk, John Exvii, Exix
short-circuit evaluation M35, M36
Shteynbuk, Oleg Exix
simple virtual functions, meaning of E163, E211
Simpson, Rosemary Exx
single-argument constructors, see constructors
Singleton pattern E222
Siva, Pradeepa Mxiv
sizeof E19, E35, M37
freestanding classes and E36
sizes
of freestanding classes E36
of objects E145
Skaller, John Max Mxiv
sleep deprivation Mxv
sleeping pills E154
slices, in standard C++ library E231
slicing problem E99-E101, M70, M71
small objects
memory allocation and E39-E48
passing E101
Smallberg, Dave Exix
Smalltalk E146, E157, E158, E176, E195, E216
smart pointers M47, M90, M159-M182, M240, M282
assignments M162-M165, M180
const and M179-M182
construction M162
conversion to dumb pointers M170-M173
copying M162-M165, M180
debugging M182
deleting M173
destruction M165-M166
distributed systems and M160-M162
for reference counting M198-M203
inheritance and M163, M173-M179
member templates and M175-M182
operator* M166-M167
operator-> M166-M167
replacing dumb pointers M207
resource leaks and M159, M173
testing for nullness M168-M170, M171
virtual constructors and M163
virtual copy constructors and M202
virtual functions and M166
Socrates E98
allusion to Exx
Some Must Watch While Some Must Sleep E154
Somer, Mark Exix
sort algorithm E230
Spanish, gratuitous use of M232
specialization, invariants over E167
specification, see interfaces
sqrt function M65
squares and rectangles E158-E160
stack objects, see objects
stack template E229, M4, M283
Stacy, Webb Mxiii
standard C library E18, E28, E224, E226, E228, E230, M278
standard C++ library E224-E232, M1, M4-M5, M11, M48, M51, M280
see also Standard Template Library
<iosfwd> and E148
<limits> and E107
abort and E28
adjacent differences and E231
algorithms within E229
array replacements and E24
basic_ostream template E226, E227
bitset template E229
C headers and E225
cleverness within E108
code reuse and M5
complex template E226, E231
containers within E174, E175, E184, E229
copy algorithm E230
count_if algorithm E230
deque template E229
diagnostics support E231, M66
equal algorithm E230
exception hierarchy within E231
exit and E28
facets and E230
find algorithm E184, E230
for_each algorithm E230
hash tables and E229
headers for, see header files
inner products and E231
internationalization support E230
iostreams and E18, E19, E228
istream typedef E226
iteration over containers in E184
list template E174, E183, E184, E229
logic_error and E135
map template E229
max and E16
namespaces and E119
numeric_limits and E107
ostream typedef E226
performance guarantees of E229, E230
push_back algorithm E184
queue template E229
rotate algorithm E230
search algorithm E230
sequences within E230
set template E182, E229
sort algorithm E230
stack template E229
string and E7, E226
stringstream template E228
summary of features M278-M279
support for errors E231
support for numeric processing E231
support for slices E231
unique algorithm E230
use of allocators within E227
use of templates M279, M280
use of traits within E227
valarray template E231
vector template E24, E57, E62, E81, E226, E229
standard headers, see header files
standard include files, see header files
Standard Template Library (STL) E175, E232, M4-M5, M95-M96, M280-M284
see also standard C++ library
conventions of E232, M284
example uses, see example uses
extensibility of E232, M284
free implementation M4
iterators and operator-> M96
pass-by-reference and M282
pass-by-value and M282
standardization committee, see ISO/ANSI standardization committee
Star Wars, allusion to M31
Stasko, John Exix
static
array, returning references to E105
binding
of default parameters E173
of nonvirtual functions E170
destruction M273-M275
functions, generated from inlines E139
initialization M273-M275
members, see static members
objects, see static objects
type, see static type
static members E130
const member functions and E94
definition E29
initialization E14, E29, E57, E58
use in namespace approximations E119-E122
static objects M151
at file scope M246
in classes vs. in functions M133-M134
in functions M133, M237
inlining and M134
returning references to E103-E105
when initialized M133
static type vs. dynamic type E171-E172, M5-M6
when copying M63
static_cast E10, M13, M14, M15, M37
example use E19, E42, E44, E70, E110, E114, E175, E176, E178, E192, E193, E194
std namespace M261
see also standard C++ library
<iostream> vs. <iostream.h> and E19
bad_alloc and E26, E35
basic_string and E227
header names and E225, E226
numeric_limits and E107, E108
set_new_handler and E30
standard C++ library and E119, E225, M280
string and E227
stdio, vs. iostreams E17-E18, M110-M112
efficiency and E18
<stdio.h> E17-E18, E225, E226
<stdlib.h> E127
Steinmüller, Uwe Exviii, Exix
stepping through functions, inlining and E142
STL, see Standard Template Library
strategy, for inlining E142
strdup E20, M275
string classes E7
see also string type
vs. char*s E8, M4
string headers E226
<string> E225, E226
<string.h> E20
string type E7, E226-E228, E229, M27, M279-M280
as standard container E229
c_str member function M27
declaring E227 -E228
destructor M256
typedef for E226
vs. String E7
String, vs. string E7
see also reference counting
stringstream template E228, M278
strlen E97
null pointer and M35
strong typing
bypassing M287
implementing E192-E194
Stroustrup, Bjarne Exvii, Exix, E64, E233, E234, E235, Mxii, Mxiii, M285, M286
strstream class M278
structs
as namespace approximations E119-E122
compatibility between C++ and C M276
constructors and E186
private M185
summaries
of efficiency costs of various language features M121
of new language features M277
of standard C++ library M278-M279
suppressing
type conversions M26, M28-M29
warnings for unused parameters M33, M40
Surgeon General's tobacco warning, allusion to M288
surrogates M217
Susann, Jacqueline M228
Swift, Dave Mxiii
switches on types, vs. virtual functions E176
system calls M97

T

Taligent's Guide to Designing Programs Exviii, Mxii
Teitelbaum, Glenn Exix
templates E187, M286, M288
">>", vs. "> >" and M29
code bloat and E190
combining with inheritance E31-E33, E193
declaring E4
default constructors and M22
defining E5
exception specifications and M73-M74
for iostream classes E226
for operator+ and operator- M108
in standard C++ library E226-E228, M279-M280
member, see member templates
pass-by-reference and M282
pass-by-value and M282
recent extensions M277
specializing M175
static data members and M144
type-safe interfaces and E194
vs. inheritance E185-E189
vs. template instantiations M7
when to use E187
temporary objects E67, E134, M34, M64, M98-M101, M105, M108, M109, M110
catching vs. parameter passing M65
efficiency and M99-M101
eliminating M100, M103-M104
exceptions and M68
function return types and M100-M104
handles to E127-E128
lifetime of M278
optimization and M104
pass-by-reference and M100
type conversions and M99-M100
vs. named objects M109
terminate M72, M76
terminology used in Effective C++ E4-E12
terminology used in More Effective C++ M5-M8
this
assignment to E141
deleting M145, M152, M157, M197, M213
effective type of E96
thrashing, and inline functions E137
throw
see also catch
by pointer M70
cost of executing M63, M79
modifying objects thrown M63
to rethrow current exception M64
vs. parameter passing M62-M67
Tilly, Barbara Exix
Tondo, Clovis Exix
traits E227
transforming concrete classes into abstract M266-M269
translation units E138
definition (English) E220
Treichel, Chris Exviii, Exix
true E9, M3
Trux, Antoine Exix
try blocks M56, M79
Twilight Zone E63
type
see also types
conversions E78, E85
ambiguity and E113-E114
global functions and E86
implicit E67, E83, E85, E86
involving long int vs. int E111
member functions and E86
private inheritance and E190
design E77-E78
of this E96
safety, and generic (void*) pointers E192
type conversion functions M25-M31
see also type conversion operators
valid sequences of M29, M31, M172, M175, M226
type conversion operators M25, M26-M27, M49, M168
see also type conversion functions
smart pointers and M175
via member templates M175-M179
type conversions M66, M220, M226
avoiding via overloading M105-M107
exceptions and M66-M67
function pointers and M241
implicit M66, M99
pass-by-reference and M100
suppressing M26, M28-M29
temporary objects and M99-M100
via implicit conversion operators M25, M26-M27, M49
via single-argument constructors M27-M31
type errors, detecting at runtime M261-M262
type system, bypassing M287
type_info class M120, M121, M261
name member function M238
type-based switches, vs. virtual functions E176
typedefs
new/delete and E24
use in namespace approximations E120
typeid M37, M120, M238
types
see also type
adding to improve error detection E217
integral (English definition) E15
nested, see nested types
private E186
static vs. dynamic M5-M6
when copying M63
type-safe interfaces E192-E194
typing, strong, implementing E192-E194

U

undefined behavior
calling strlen with null pointer M35
casting away constness of truly const objects E97
dangling pointers to temporary objects and E128
deallocating memory still in use E47
deleting a derived array via a base class pointer M18
deleting arrays via non-array delete E23
deleting deleted pointers E52
deleting derived objects via base pointers E60, E62
deleting memory not returned by new M21
deleting objects twice M163, M173
deleting objects via array delete E23
dereferencing an arrays' one-beyond-the-end pointer M281
dereferencing null pointers M10, M164, M167
initialization order of non-local static objects and E221
meaning of E20
mixing new/delete and malloc/free E20
mixing new/free or malloc/delete M275
operating on deleted objects E73
order of evaluation of parameters M36
referring to a string element after the string has been modified M192
returning references to local objects and E133
uninitialized objects and E217, E220
uninitialized pointers and E219
underbar, as naming convention E144
unexpected M72, M74, M76, M77, M78
unexpected exceptions M70
see also unexpected
handling M75-M77
replacing with other exceptions M76
Unicode M279
union E41
union, using to avoid unnecessary data M182
unique algorithm E230
unnamed classes, compiler diagnostics and E112
unnamed namespaces M246, M247
unnamed objects, see temporary objects
unnecessary objects, avoiding E137
unused objects
cost of E135
resulting from exceptions E135
unused parameters, suppressing warnings about M33, M40
Urbano, Nancy L. Exix, Exx, Mxiv, Mxv
see also goddess, Clancy
URLs, see Web sites
use counting M185
see also reference counting
useful abstractions M267
Usenet newsgroups Exvii, Exviii, Mxi, M289
recommended M289
USENIX Association Exx
user-defined conversion functions, see type conversion functions
user-defined types
consistency with built-ins M254
overloaded operators and M106
using declarations M133, M143
see also namespaces

V

valarray template E231, M279, M280
value equality E74
values, as parameters, see pass-by-value
Van Wyk, Chris Exix, Mxiii
variables, defining E135-E137
constructors and E135
in if statements E181
vector template E24, E57, E62, E81, E226, E229, M4, M11, M22, M283
Vinoski, Steve Exix, Mxiii
virtual base classes E198, E200, M118-M120, M154
complexities of E201
cost of E198, E118-E120
data members in E200
default constructors and M22
initialization of E200
meaning of E199
object addresses and M241
virtual constructors E149, E150, M46, M123-M127
see also virtual copy constructors
definition M126
example uses M46, M125
smart pointers and M163
virtual copy constructors M126-M127
see also virtual constructors
smart pointers and M202
virtual destructors M143, M254-M257
see also pure virtual destructors
behavior of E61
delete and M256
object deletion and E59-E63
pure, see pure virtual destructors
virtual functions E186
see also functions, pure virtual functions, virtual destructors
as customization mechanism E206-E207
compatibility with other languages and E61
default implementations and E163-E167
"demand-paged" M253
design challenges M248
dominance and E200
dynamic binding of E170
dynamic_cast and M14, M156
efficiency and E168, M113-M118
exceptions and M79
explicit qualification and E196
for implementing field delimiters E202
implementation E61-E62, M113-M118
meaning of none in class E61
mixed-type assignments and M183, M260, M261
pass/catch-by-reference and M72
pass/catch-by-value and M70
pure, see pure virtual functions
redeclaring E189
redefining E196-E197
refined return type M126, M260
RTTI and M120, M256
simple, meaning of E163, E211
smart pointers and M166
vs. catch clauses M67
vs. conditionals and switches E176
vs. dynamic_cast E180
vs. RTTI M231-M232
vtbl index M117
"virtual" non-member functions M128-M129
virtual table pointers, see vptrs
virtual tables, see vtbls
Vlissides, John M288, M289
void* pointers, see generic (void*) pointers
void*, dynamic_cast to M156
volatileness, casting away M13
vptrs E61, M113, M116, M117, M256
effective overhead of M256
efficiency and M116
optimization under multiple inheritance M120
vtbls E61, E64, M113-M116, M117, M121, M256
emulating M235-M251
heuristic for generating M115
inline virtual functions and M115
RTTI and M120

W

Wait, John Exx, Mxiv, Mxv
warnings
from compiler E223-E224
suppressing, for unused parameters M33, M40
Weaver, Sarah Exx
Web sites
for Effective C++ Exvi
for free STL implementation M4
for More Effective C++ E237, M8
what function M70, M71
When Bad Things Happen to Good People, allusion to E181
wide characters M279
Wild, Fred Mxiii
°Wildlife Preservation Trust International
William of Occam E207, E209
Williams, Russ Exix
Wizard of Oz, allusion to E159
Wright, Kathy Exx
writing the author Exv, M8
WWW sites, see Web sites

X

X Files, The, allusion to E51
XYZ Airlines E163

Y

Yiddish, gratuitous use of M32
Yogi Bear, allusion to E103

Z

Zabluda, Oleg Exix
Zell, Adam Exix
Zenad, Hachemi Mxiv
zero
as int E109
as pointer E109