C++ Primer英文版.pdf

C++ Primer英文版.pdf
 

书籍描述

编辑推荐
《C++ Primer英文版(第5版)》编辑推荐:最新标准C++11发布,距上一版本已10年;《C++ Primer英文版(第5版)》是唯一持续更新的全球顶级C++读本。多位深孚众望的大师组合堪称绝无仅有;经过前四个版本积累,第5版的体例堪称完美。这一版本作者历时3年完成,极力避免在原版上升级,而是将C++11的新特性真正融入各章节;更将所有代码示例用C++ 11的简化写法完成,而不是仅单独增加内容。

作者简介
Stanley B. Lippman目前是微软公司 Visual C++ 团队的架构师。他从1984年开始在贝尔实验室与C++的设计者Bjarne Stroustrup一起从事C++的设计与开发。他在迪士尼和梦工厂从事动画制作,还担任过JPL的高级顾问。
Josée Lajoie曾经是IBM加拿大研究中心C/C++编译器开发团队的成员,在ISO C++标准委员会工作了7年,担任过ISO核心语言工作组的主席和C++ Report杂志的专栏作家。
Barbara E. Moo是拥有25年软件经验的独立咨询顾问。在AT&T,她与Stroustrup、Lippman一起管理过复杂的C++开发项目。

目录
Contents
Preface xxiii
Chapter 1 Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 Writing a Simple C++Program . . . . . . . . . . . . . . . . . . . . . . 2
1.1.1 Compiling and Executing Our Program . . . . . . . . . . . . . 3
1.2 AFirstLookat Input/Output . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 AWordaboutComments . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4 FlowofControl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.4.1 The whileStatement . . . . . . . . . . . . . . . . . . . . . . . 11
1.4.2 The forStatement . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.4.3 ReadinganUnknownNumberof Inputs . . . . . . . . . . . . 14
1.4.4 The ifStatement . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.5 IntroducingClasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.5.1 The Sales_itemClass . . . . . . . . . . . . . . . . . . . . . . 20
1.5.2 AFirstLookatMemberFunctions . . . . . . . . . . . . . . . . 23
1.6 TheBookstoreProgram. . . . . . . . . . . . . . . . . . . . . . . . . . . 24
ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
DefinedTerms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Part I The Basics 29
Chapter 2 Variables and Basic Types . . . . . . . . . . . . . . . . . . . . . 31
2.1 PrimitiveBuilt-inTypes . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.1.1 ArithmeticTypes . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.1.2 TypeConversions . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.1.3 Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.2 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
2.2.1 VariableDefinitions . . . . . . . . . . . . . . . . . . . . . . . . 41
2.2.2 VariableDeclarations andDefinitions . . . . . . . . . . . . . . 44
2.2.3 Identifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
2.2.4 Scopeof aName . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.3 CompoundTypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
2.3.1 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
2.3.2 Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
2.3.3 UnderstandingCompoundTypeDeclarations . . . . . . . . . 57
2.4 constQualifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
2.4.1 References to const . . . . . . . . . . . . . . . . . . . . . . . . 61
2.4.2 Pointers and const . . . . . . . . . . . . . . . . . . . . . . . . 62
2.4.3 Top-Level const . . . . . . . . . . . . . . . . . . . . . . . . . . 63
2.4.4 constexprandConstantExpressions . . . . . . . . . . . . . 65
2.5 DealingwithTypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
2.5.1 TypeAliases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
2.5.2 The autoTypeSpecifier . . . . . . . . . . . . . . . . . . . . . . 68
2.5.3 The decltypeTypeSpecifier . . . . . . . . . . . . . . . . . . . 70
2.6 DefiningOurOwnDataStructures . . . . . . . . . . . . . . . . . . . . 72
2.6.1 Defining the Sales_dataType . . . . . . . . . . . . . . . . . 72
2.6.2 Using the Sales_dataClass . . . . . . . . . . . . . . . . . . . 74
2.6.3 Writing Our Own Header Files . . . . . . . . . . . . . . . . . . 76
ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
DefinedTerms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Chapter 3 Strings, Vectors, and Arrays . . . . . . . . . . . . . . . . . . . . 81
3.1 Namespace usingDeclarations . . . . . . . . . . . . . . . . . . . . . . 82
3.2 Library stringType . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
3.2.1 Defining and Initializing strings . . . . . . . . . . . . . . . . 84
3.2.2 Operations on strings . . . . . . . . . . . . . . . . . . . . . . 85
3.2.3 Dealing with the Characters in a string . . . . . . . . . . . . 90
3.3 Library vectorType . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
3.3.1 Defining and Initializing vectors . . . . . . . . . . . . . . . . 97
3.3.2 Adding Elements to a vector . . . . . . . . . . . . . . . . . . 100
3.3.3 Other vectorOperations . . . . . . . . . . . . . . . . . . . . . 102
3.4 IntroducingIterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
3.4.1 UsingIterators . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
3.4.2 IteratorArithmetic . . . . . . . . . . . . . . . . . . . . . . . . . 111
3.5 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
3.5.1 DefiningandInitializingBuilt-inArrays . . . . . . . . . . . . 113
3.5.2 AccessingtheElementsof anArray . . . . . . . . . . . . . . . 116
3.5.3 Pointers andArrays . . . . . . . . . . . . . . . . . . . . . . . . 117
3.5.4 C-StyleCharacterStrings . . . . . . . . . . . . . . . . . . . . . 122
3.5.5 InterfacingtoOlderCode . . . . . . . . . . . . . . . . . . . . . 124
3.6 MultidimensionalArrays . . . . . . . . . . . . . . . . . . . . . . . . . 125
ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
DefinedTerms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Chapter 4 Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
4.1 Fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
4.1.1 BasicConcepts . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
4.1.2 PrecedenceandAssociativity . . . . . . . . . . . . . . . . . . . 136
4.1.3 OrderofEvaluation . . . . . . . . . . . . . . . . . . . . . . . . 137
4.2 ArithmeticOperators . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
4.3 Logical andRelationalOperators . . . . . . . . . . . . . . . . . . . . . 141
4.4 AssignmentOperators . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
4.5 Increment andDecrementOperators . . . . . . . . . . . . . . . . . . . 147
4.6 TheMemberAccessOperators . . . . . . . . . . . . . . . . . . . . . . 150
4.7 TheConditionalOperator . . . . . . . . . . . . . . . . . . . . . . . . . 151
4.8 TheBitwiseOperators . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
4.9 The sizeofOperator . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
4.10 CommaOperator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
4.11 TypeConversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
4.11.1 TheArithmeticConversions . . . . . . . . . . . . . . . . . . . 159
4.11.2 Other ImplicitConversions . . . . . . . . . . . . . . . . . . . . 161
4.11.3 ExplicitConversions . . . . . . . . . . . . . . . . . . . . . . . . 162
4.12 OperatorPrecedenceTable . . . . . . . . . . . . . . . . . . . . . . . . . 166
ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
DefinedTerms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Chapter 5 Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
5.1 Simple Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
5.2 StatementScope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
5.3 Conditional Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
5.3.1 The ifStatement . . . . . . . . . . . . . . . . . . . . . . . . . . 175
5.3.2 The switchStatement . . . . . . . . . . . . . . . . . . . . . . . 178
5.4 IterativeStatements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
5.4.1 The whileStatement . . . . . . . . . . . . . . . . . . . . . . . 183
5.4.2 Traditional forStatement . . . . . . . . . . . . . . . . . . . . . 185
5.4.3 Range forStatement . . . . . . . . . . . . . . . . . . . . . . . 187
5.4.4 The do whileStatement . . . . . . . . . . . . . . . . . . . . . 189
5.5 JumpStatements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
5.5.1 The breakStatement . . . . . . . . . . . . . . . . . . . . . . . 190
5.5.2 The continueStatement . . . . . . . . . . . . . . . . . . . . . 191
5.5.3 The gotoStatement . . . . . . . . . . . . . . . . . . . . . . . . 192
5.6 tryBlocks andExceptionHandling . . . . . . . . . . . . . . . . . . . 193
5.6.1 A throwExpression . . . . . . . . . . . . . . . . . . . . . . . . 193
5.6.2 The tryBlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
5.6.3 StandardExceptions . . . . . . . . . . . . . . . . . . . . . . . . 197
ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
DefinedTerms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Chapter 6 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
6.1 FunctionBasics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
6.1.1 LocalObjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
6.1.2 FunctionDeclarations . . . . . . . . . . . . . . . . . . . . . . . 206
6.1.3 SeparateCompilation . . . . . . . . . . . . . . . . . . . . . . . 207
6.2 ArgumentPassing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
6.2.1 PassingArgumentsbyValue . . . . . . . . . . . . . . . . . . . 209
6.2.2 PassingArgumentsbyReference . . . . . . . . . . . . . . . . . 210
6.2.3 constParametersandArguments . . . . . . . . . . . . . . . . 212
6.2.4 ArrayParameters . . . . . . . . . . . . . . . . . . . . . . . . . . 214
6.2.5 main:HandlingCommand-LineOptions . . . . . . . . . . . . 218
6.2.6 FunctionswithVaryingParameters . . . . . . . . . . . . . . . 220
6.3 Return Types and the returnStatement . . . . . . . . . . . . . . . . 222
6.3.1 FunctionswithNoReturnValue . . . . . . . . . . . . . . . . . 223
6.3.2 FunctionsThatReturnaValue . . . . . . . . . . . . . . . . . . 223
6.3.3 ReturningaPointer toanArray . . . . . . . . . . . . . . . . . 228
6.4 OverloadedFunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
6.4.1 OverloadingandScope . . . . . . . . . . . . . . . . . . . . . . 234
6.5 Features forSpecializedUses . . . . . . . . . . . . . . . . . . . . . . . 236
6.5.1 DefaultArguments . . . . . . . . . . . . . . . . . . . . . . . . . 236
6.5.2 Inline and constexprFunctions . . . . . . . . . . . . . . . . 238
6.5.3 Aids for Debugging . . . . . . . . . . . . . . . . . . . . . . . . 240
6.6 FunctionMatching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
6.6.1 ArgumentTypeConversions . . . . . . . . . . . . . . . . . . . 245
6.7 Pointers toFunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
DefinedTerms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
Chapter 7 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
7.1 DefiningAbstractDataTypes . . . . . . . . . . . . . . . . . . . . . . . 254
7.1.1 Designing the Sales_dataClass . . . . . . . . . . . . . . . . 254
7.1.2 Defining the Revised Sales_dataClass . . . . . . . . . . . . 256
7.1.3 DefiningNonmemberClass-RelatedFunctions . . . . . . . . . 260
7.1.4 Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
7.1.5 Copy,Assignment, andDestruction . . . . . . . . . . . . . . . 267
7.2 AccessControl andEncapsulation . . . . . . . . . . . . . . . . . . . . 268
7.2.1 Friends . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
7.3 AdditionalClassFeatures . . . . . . . . . . . . . . . . . . . . . . . . . 271
7.3.1 ClassMembersRevisited . . . . . . . . . . . . . . . . . . . . . 271
7.3.2 Functions That Return *this . . . . . . . . . . . . . . . . . . . 275
7.3.3 ClassTypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
7.3.4 FriendshipRevisited . . . . . . . . . . . . . . . . . . . . . . . . 279
7.4 ClassScope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
7.4.1 NameLookupandClassScope . . . . . . . . . . . . . . . . . . 283
7.5 ConstructorsRevisited . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
7.5.1 Constructor InitializerList . . . . . . . . . . . . . . . . . . . . . 288
7.5.2 DelegatingConstructors . . . . . . . . . . . . . . . . . . . . . . 291
7.5.3 TheRoleof theDefaultConstructor . . . . . . . . . . . . . . . 293
7.5.4 ImplicitClass-TypeConversions . . . . . . . . . . . . . . . . . 294
7.5.5 AggregateClasses . . . . . . . . . . . . . . . . . . . . . . . . . 298
7.5.6 LiteralClasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
7.6 staticClassMembers . . . . . . . . . . . . . . . . . . . . . . . . . . 300
ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
DefinedTerms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Part II The C++ Library 307
Chapter 8 The IO Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
8.1 The IOClasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
8.1.1 NoCopyorAssignfor IOObjects . . . . . . . . . . . . . . . . 311
8.1.2 ConditionStates . . . . . . . . . . . . . . . . . . . . . . . . . . 312
8.1.3 ManagingtheOutputBuffer . . . . . . . . . . . . . . . . . . . 314
8.2 File Input and Output . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
8.2.1 Using File Stream Objects . . . . . . . . . . . . . . . . . . . . . 317
8.2.2 File Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
8.3 stringStreams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
8.3.1 Using an istringstream . . . . . . . . . . . . . . . . . . . . 321
8.3.2 Using ostringstreams . . . . . . . . . . . . . . . . . . . . . 323
ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
DefinedTerms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
Chapter 9 Sequential Containers . . . . . . . . . . . . . . . . . . . . . . . 325
9.1 Overviewof the SequentialContainers . . . . . . . . . . . . . . . . . . 326
9.2 ContainerLibraryOverview . . . . . . . . . . . . . . . . . . . . . . . . 328
9.2.1 Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
9.2.2 ContainerTypeMembers . . . . . . . . . . . . . . . . . . . . . 332
9.2.3 begin and endMembers . . . . . . . . . . . . . . . . . . . . . 333
9.2.4 DefiningandInitializingaContainer . . . . . . . . . . . . . . 334
9.2.5 Assignment and swap . . . . . . . . . . . . . . . . . . . . . . . 337
9.2.6 ContainerSizeOperations . . . . . . . . . . . . . . . . . . . . . 340
9.2.7 RelationalOperators . . . . . . . . . . . . . . . . . . . . . . . . 340
9.3 SequentialContainerOperations . . . . . . . . . . . . . . . . . . . . . 341
9.3.1 AddingElements toaSequentialContainer . . . . . . . . . . . 341
9.3.2 AccessingElements . . . . . . . . . . . . . . . . . . . . . . . . . 346
9.3.3 ErasingElements . . . . . . . . . . . . . . . . . . . . . . . . . . 348
9.3.4 Specialized forward_listOperations . . . . . . . . . . . . . 350
9.3.5 ResizingaContainer . . . . . . . . . . . . . . . . . . . . . . . . 352
9.3.6 ContainerOperationsMayInvalidateIterators . . . . . . . . . 353
9.4 How a vectorGrows . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
9.5 Additional stringOperations . . . . . . . . . . . . . . . . . . . . . . 360
9.5.1 Other Ways to Construct strings . . . . . . . . . . . . . . . . 360
9.5.2 Other Ways to Change a string . . . . . . . . . . . . . . . . . 361
9.5.3 stringSearchOperations . . . . . . . . . . . . . . . . . . . . 364
9.5.4 The compareFunctions . . . . . . . . . . . . . . . . . . . . . . 366
9.5.5 NumericConversions . . . . . . . . . . . . . . . . . . . . . . . 367
9.6 ContainerAdaptors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
DefinedTerms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
Chapter 10 Generic Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . 375
10.1 Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
10.2 AFirstLookat theAlgorithms . . . . . . . . . . . . . . . . . . . . . . 378
10.2.1 Read-OnlyAlgorithms . . . . . . . . . . . . . . . . . . . . . . . 379
10.2.2 AlgorithmsThatWriteContainerElements . . . . . . . . . . . 380
10.2.3 AlgorithmsThatReorderContainerElements . . . . . . . . . 383
10.3 CustomizingOperations . . . . . . . . . . . . . . . . . . . . . . . . . . 385
10.3.1 PassingaFunctiontoanAlgorithm . . . . . . . . . . . . . . . 386
10.3.2 LambdaExpressions . . . . . . . . . . . . . . . . . . . . . . . . 387
10.3.3 LambdaCapturesandReturns . . . . . . . . . . . . . . . . . . 392
10.3.4 BindingArguments . . . . . . . . . . . . . . . . . . . . . . . . 397
10.4 Revisiting Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
10.4.1 Insert Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
10.4.2 iostream Iterators . . . . . . . . . . . . . . . . . . . . . . . . 403
10.4.3 Reverse Iterators . . . . . . . . . . . . . . . . . . . . . . . . . . 407
10.5 StructureofGenericAlgorithms . . . . . . . . . . . . . . . . . . . . . 410
10.5.1 TheFive IteratorCategories . . . . . . . . . . . . . . . . . . . . 410
10.5.2 AlgorithmParameterPatterns . . . . . . . . . . . . . . . . . . 412
10.5.3 AlgorithmNamingConventions . . . . . . . . . . . . . . . . . 413
10.6 Container-SpecificAlgorithms . . . . . . . . . . . . . . . . . . . . . . . 415
ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
DefinedTerms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
Chapter 11 Associative Containers . . . . . . . . . . . . . . . . . . . . . . . 419
11.1 UsinganAssociativeContainer . . . . . . . . . . . . . . . . . . . . . . 420
11.2 Overviewof theAssociativeContainers . . . . . . . . . . . . . . . . . 423
11.2.1 DefininganAssociativeContainer . . . . . . . . . . . . . . . . 423
11.2.2 Requirements onKeyType . . . . . . . . . . . . . . . . . . . . 424
11.2.3 The pairType . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
11.3 Operations onAssociativeContainers . . . . . . . . . . . . . . . . . . 428
11.3.1 AssociativeContainer Iterators . . . . . . . . . . . . . . . . . . 429
11.3.2 AddingElements . . . . . . . . . . . . . . . . . . . . . . . . . . 431
11.3.3 ErasingElements . . . . . . . . . . . . . . . . . . . . . . . . . . 434
11.3.4 Subscripting a map . . . . . . . . . . . . . . . . . . . . . . . . . 435
11.3.5 AccessingElements . . . . . . . . . . . . . . . . . . . . . . . . . 436
11.3.6 AWordTransformationMap . . . . . . . . . . . . . . . . . . . 440
11.4 TheUnorderedContainers . . . . . . . . . . . . . . . . . . . . . . . . . 443
ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
DefinedTerms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
Chapter 12 DynamicMemory . . . . . . . . . . . . . . . . . . . . . . . . . . 449
12.1 DynamicMemoryandSmartPointers . . . . . . . . . . . . . . . . . . 450
12.1.1 The shared_ptrClass . . . . . . . . . . . . . . . . . . . . . . 450
12.1.2 ManagingMemoryDirectly . . . . . . . . . . . . . . . . . . . . 458
12.1.3 Using shared_ptrs with new . . . . . . . . . . . . . . . . . . 464
12.1.4 SmartPointers andExceptions . . . . . . . . . . . . . . . . . . 467
12.1.5 unique_ptr . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
12.1.6 weak_ptr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473
12.2 DynamicArrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476
12.2.1 newandArrays . . . . . . . . . . . . . . . . . . . . . . . . . . . 477
12.2.2 The allocatorClass . . . . . . . . . . . . . . . . . . . . . . . 481
12.3 UsingtheLibrary:AText-QueryProgram . . . . . . . . . . . . . . . . 484
12.3.1 Designof theQueryProgram . . . . . . . . . . . . . . . . . . . 485
12.3.2 DefiningtheQueryProgramClasses . . . . . . . . . . . . . . . 487
ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
DefinedTerms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491
Part III Tools for Class Authors 493
Chapter 13 Copy Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495
13.1 Copy,Assign, andDestroy . . . . . . . . . . . . . . . . . . . . . . . . . 496
13.1.1 TheCopyConstructor . . . . . . . . . . . . . . . . . . . . . . . 496
13.1.2 TheCopy-AssignmentOperator . . . . . . . . . . . . . . . . . 500
13.1.3 TheDestructor . . . . . . . . . . . . . . . . . . . . . . . . . . . 501
13.1.4 TheRuleofThree/Five . . . . . . . . . . . . . . . . . . . . . . 503
13.1.5 Using = default . . . . . . . . . . . . . . . . . . . . . . . . . . 506
13.1.6 PreventingCopies . . . . . . . . . . . . . . . . . . . . . . . . . 507
13.2 CopyControl andResourceManagement . . . . . . . . . . . . . . . . 510
13.2.1 ClassesThatActLikeValues . . . . . . . . . . . . . . . . . . . 511
13.2.2 DefiningClassesThatActLikePointers . . . . . . . . . . . . . 513
13.3 Swap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
13.4 ACopy-ControlExample . . . . . . . . . . . . . . . . . . . . . . . . . 519
13.5 ClassesThatManageDynamicMemory . . . . . . . . . . . . . . . . . 524
13.6 MovingObjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531
13.6.1 RvalueReferences . . . . . . . . . . . . . . . . . . . . . . . . . 532
13.6.2 MoveConstructor andMoveAssignment . . . . . . . . . . . . 534
13.6.3 RvalueReferencesandMemberFunctions . . . . . . . . . . . 544
ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
DefinedTerms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
Chapter 14 Overloaded Operations and Conversions . . . . . . . . . . . . . 551
14.1 BasicConcepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552
14.2 Input andOutputOperators . . . . . . . . . . . . . . . . . . . . . . . . 556
14.2.1 Overloading the Output Operator << . . . . . . . . . . . . . . 557
14.2.2 Overloading the Input Operator >> . . . . . . . . . . . . . . . 558
14.3 Arithmetic andRelationalOperators . . . . . . . . . . . . . . . . . . . 560
14.3.1 EqualityOperators . . . . . . . . . . . . . . . . . . . . . . . . . 561
14.3.2 RelationalOperators . . . . . . . . . . . . . . . . . . . . . . . . 562
14.4 AssignmentOperators . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
14.5 SubscriptOperator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564
14.6 Increment andDecrementOperators . . . . . . . . . . . . . . . . . . . 566
14.7 MemberAccessOperators . . . . . . . . . . . . . . . . . . . . . . . . . 569
14.8 Function-CallOperator . . . . . . . . . . . . . . . . . . . . . . . . . . . 571
14.8.1 LambdasAreFunctionObjects . . . . . . . . . . . . . . . . . . 572
14.8.2 Library-DefinedFunctionObjects . . . . . . . . . . . . . . . . 574
14.8.3 Callable Objects and function . . . . . . . . . . . . . . . . . 576
14.9 Overloading,Conversions, andOperators . . . . . . . . . . . . . . . . 579
14.9.1 ConversionOperators . . . . . . . . . . . . . . . . . . . . . . . 580
14.9.2 AvoidingAmbiguousConversions . . . . . . . . . . . . . . . . 583
14.9.3 FunctionMatchingandOverloadedOperators . . . . . . . . . 587
ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590
DefinedTerms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590
Chapter 15 Object-Oriented Programming . . . . . . . . . . . . . . . . . . . 591
15.1 OOP:AnOverview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592
15.2 DefiningBaseandDerivedClasses . . . . . . . . . . . . . . . . . . . . 594
15.2.1 DefiningaBaseClass . . . . . . . . . . . . . . . . . . . . . . . . 594
15.2.2 DefiningaDerivedClass . . . . . . . . . . . . . . . . . . . . . 596
15.2.3 Conversions andInheritance . . . . . . . . . . . . . . . . . . . 601
15.3 VirtualFunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603
15.4 AbstractBaseClasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608
15.5 AccessControl andInheritance . . . . . . . . . . . . . . . . . . . . . . 611
15.6 ClassScopeunder Inheritance . . . . . . . . . . . . . . . . . . . . . . . 617
15.7 Constructors andCopyControl . . . . . . . . . . . . . . . . . . . . . . 622
15.7.1 VirtualDestructors . . . . . . . . . . . . . . . . . . . . . . . . . 622
15.7.2 SynthesizedCopyControl andInheritance . . . . . . . . . . . 623
15.7.3 Derived-ClassCopy-ControlMembers . . . . . . . . . . . . . 625
15.7.4 InheritedConstructors . . . . . . . . . . . . . . . . . . . . . . . 628
15.8 Containers andInheritance . . . . . . . . . . . . . . . . . . . . . . . . 630
15.8.1 Writing a BasketClass . . . . . . . . . . . . . . . . . . . . . . 631
15.9 TextQueriesRevisited . . . . . . . . . . . . . . . . . . . . . . . . . . . 634
15.9.1 AnObject-OrientedSolution . . . . . . . . . . . . . . . . . . . 636
15.9.2 The Query_base and QueryClasses . . . . . . . . . . . . . . 639
15.9.3 TheDerivedClasses . . . . . . . . . . . . . . . . . . . . . . . . 642
15.9.4 The evalFunctions . . . . . . . . . . . . . . . . . . . . . . . . 645
ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649
DefinedTerms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649
Chapter 16 Templates and Generic Programming . . . . . . . . . . . . . . . 651
16.1 DefiningaTemplate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652
16.1.1 FunctionTemplates . . . . . . . . . . . . . . . . . . . . . . . . . 652
16.1.2 ClassTemplates . . . . . . . . . . . . . . . . . . . . . . . . . . . 658
16.1.3 TemplateParameters . . . . . . . . . . . . . . . . . . . . . . . . 668
16.1.4 MemberTemplates . . . . . . . . . . . . . . . . . . . . . . . . . 672
16.1.5 Controlling Instantiations . . . . . . . . . . . . . . . . . . . . . 675
16.1.6 Efficiency and Flexibility . . . . . . . . . . . . . . . . . . . . . . 676
16.2 TemplateArgumentDeduction . . . . . . . . . . . . . . . . . . . . . . 678
16.2.1 Conversions andTemplateTypeParameters . . . . . . . . . . 679
16.2.2 Function-TemplateExplicitArguments . . . . . . . . . . . . . 681
16.2.3 Trailing Return Types and Type Transformation . . . . . . . . 683
16.2.4 FunctionPointers andArgumentDeduction . . . . . . . . . . 686
16.2.5 TemplateArgumentDeductionandReferences . . . . . . . . 687
16.2.6 Understanding std::move . . . . . . . . . . . . . . . . . . . . 690
16.2.7 Forwarding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692
16.3 OverloadingandTemplates . . . . . . . . . . . . . . . . . . . . . . . . 694
16.4 VariadicTemplates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699
16.4.1 WritingaVariadicFunctionTemplate . . . . . . . . . . . . . . 701
16.4.2 PackExpansion . . . . . . . . . . . . . . . . . . . . . . . . . . . 702
16.4.3 ForwardingParameterPacks . . . . . . . . . . . . . . . . . . . 704
16.5 Template Specializations . . . . . . . . . . . . . . . . . . . . . . . . . . 706
ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713
DefinedTerms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713
Part IV Advanced Topics 715
Chapter 17 Specialized Library Facilities . . . . . . . . . . . . . . . . . . . 717
17.1 The tupleType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718
17.1.1 Defining and Initializing tuples . . . . . . . . . . . . . . . . . 718
17.1.2 Using a tuple toReturnMultipleValues . . . . . . . . . . . . 721
17.2 The bitsetType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723
17.2.1 Defining and Initializing bitsets . . . . . . . . . . . . . . . . 723
17.2.2 Operations on bitsets . . . . . . . . . . . . . . . . . . . . . . 725
17.3 RegularExpressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728
17.3.1 UsingtheRegularExpressionLibrary . . . . . . . . . . . . . . 729
17.3.2 TheMatchandRegex IteratorTypes . . . . . . . . . . . . . . . 734
17.3.3 UsingSubexpressions . . . . . . . . . . . . . . . . . . . . . . . 738
17.3.4 Using regex_replace . . . . . . . . . . . . . . . . . . . . . . 741
17.4 RandomNumbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745
17.4.1 Random-NumberEngines andDistribution . . . . . . . . . . . 745
17.4.2 OtherKinds ofDistributions . . . . . . . . . . . . . . . . . . . 749
17.5 The IOLibraryRevisited . . . . . . . . . . . . . . . . . . . . . . . . . . 752
17.5.1 FormattedInput andOutput . . . . . . . . . . . . . . . . . . . 753
17.5.2 UnformattedInput/OutputOperations . . . . . . . . . . . . . 761
17.5.3 RandomAccess toaStream . . . . . . . . . . . . . . . . . . . . 763
ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 769
DefinedTerms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 769
Chapter 18 Tools for Large Programs . . . . . . . . . . . . . . . . . . . . . . 771
18.1 ExceptionHandling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772
18.1.1 ThrowinganException . . . . . . . . . . . . . . . . . . . . . . 772
18.1.2 CatchinganException . . . . . . . . . . . . . . . . . . . . . . . 775
18.1.3 Function tryBlocks andConstructors . . . . . . . . . . . . . 777
18.1.4 The noexceptExceptionSpecification . . . . . . . . . . . . . 779
18.1.5 ExceptionClassHierarchies . . . . . . . . . . . . . . . . . . . . 782
18.2 Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 785
18.2.1 NamespaceDefinitions . . . . . . . . . . . . . . . . . . . . . . 785
18.2.2 UsingNamespaceMembers . . . . . . . . . . . . . . . . . . . . 792
18.2.3 Classes,Namespaces,andScope . . . . . . . . . . . . . . . . . 796
18.2.4 OverloadingandNamespaces . . . . . . . . . . . . . . . . . . 800
18.3 Multiple andVirtual Inheritance . . . . . . . . . . . . . . . . . . . . . 802
18.3.1 Multiple Inheritance . . . . . . . . . . . . . . . . . . . . . . . . 803
18.3.2 Conversions andMultipleBaseClasses . . . . . . . . . . . . . 805
18.3.3 ClassScopeunderMultiple Inheritance . . . . . . . . . . . . . 807
18.3.4 Virtual Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . 810
18.3.5 Constructors andVirtual Inheritance . . . . . . . . . . . . . . . 813
ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816
DefinedTerms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816
Chapter 19 Specialized Tools and Techniques . . . . . . . . . . . . . . . . . 819
19.1 Controlling Memory Allocation . . . . . . . . . . . . . . . . . . . . . . 820
19.1.1 Overloading new and delete . . . . . . . . . . . . . . . . . . 820
19.1.2 Placement newExpressions . . . . . . . . . . . . . . . . . . . . 823
19.2 Run-TimeTypeIdentification . . . . . . . . . . . . . . . . . . . . . . . 825
19.2.1 The dynamic_castOperator . . . . . . . . . . . . . . . . . . 825
19.2.2 The typeidOperator . . . . . . . . . . . . . . . . . . . . . . . 826
19.2.3 UsingRTTI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828
19.2.4 The type_infoClass . . . . . . . . . . . . . . . . . . . . . . . 831
19.3 Enumerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 832
19.4 Pointer toClassMember . . . . . . . . . . . . . . . . . . . . . . . . . . 835
19.4.1 Pointers toDataMembers . . . . . . . . . . . . . . . . . . . . . 836
19.4.2 Pointers toMemberFunctions . . . . . . . . . . . . . . . . . . 838
19.4.3 UsingMemberFunctions asCallableObjects . . . . . . . . . . 841
19.5 NestedClasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843
19.6 union:ASpace-SavingClass . . . . . . . . . . . . . . . . . . . . . . . 847
19.7 LocalClasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 852
19.8 InherentlyNonportableFeatures . . . . . . . . . . . . . . . . . . . . . 854
19.8.1 Bit-fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854
19.8.2 volatileQualifier . . . . . . . . . . . . . . . . . . . . . . . . 856
19.8.3 Linkage Directives: extern "C" . . . . . . . . . . . . . . . . . 857
ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 862
DefinedTerms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 862
Appendix A The Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . 865
A.1 LibraryNames andHeaders . . . . . . . . . . . . . . . . . . . . . . . . 866
A.2 ABriefTourof theAlgorithms . . . . . . . . . . . . . . . . . . . . . . 870
A.2.1 Algorithms toFindanObject . . . . . . . . . . . . . . . . . . . 871
A.2.2 OtherRead-OnlyAlgorithms . . . . . . . . . . . . . . . . . . . 872
A.2.3 BinarySearchAlgorithms . . . . . . . . . . . . . . . . . . . . . 873
A.2.4 AlgorithmsThatWriteContainerElements . . . . . . . . . . . 873
A.2.5 PartitioningandSortingAlgorithms . . . . . . . . . . . . . . . 875
A.2.6 GeneralReorderingOperations . . . . . . . . . . . . . . . . . . 877
A.2.7 PermutationAlgorithms . . . . . . . . . . . . . . . . . . . . . . 879
A.2.8 SetAlgorithms forSortedSequences . . . . . . . . . . . . . . . 880
A.2.9 MinimumandMaximumValues . . . . . . . . . . . . . . . . . 880
A.2.10 NumericAlgorithms . . . . . . . . . . . . . . . . . . . . . . . . 881
A.3 RandomNumbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882
A.3.1 RandomNumberDistributions . . . . . . . . . . . . . . . . . . 883
A.3.2 RandomNumberEngines . . . . . . . . . . . . . . . . . . . . . 884
Index 887

序言
难以计数的程序员已经通过旧版的C++ Primer 学会了C++语言。而在这段时间中,C++本身又已成熟了许多:语言本身的关注点和程序设计社区的关注点都已大大开阔,已经从主要关注机器效率转变为更多地关注编程效率。
2011 年,C++标准委员会发布了ISO C++标准的一个重要修订版。此修订版是C++进化过程中的最新一步,延续了前几个版本对编程效率的强调。新标准的主要目标是:
使语言更为统一,更易于教学
使标准库更简单、安全、使用更高效
使编写高效率的抽象和库变得更简单
因此,在这个版本的C++ Primer 中,我们进行了彻底的修改,使用了最新的C++标准。为了了解新标准是如何全面影响C++语言的,你可以看一下xxiii 页至xxv 页的新特性列表,其中列出了哪些章节涉及了C++的新特性。
新标准增加的一些特性是具有普适性的,例如用于类型推断的auto。这些新特性使本书中的代码更易于阅读和理解。程序(以及程序员!)可以忽略类型的细节,从而更容易集中精力于程序逻辑上来。其他一些新特性,例如智能指针和允许移动的容器,允许我们编写更为复杂的类,而又不必与错综复杂的资源管理做斗争。因此,在本书中开始讲授如何编写自己的类,会比第4 版简单得多。旧标准中阻挡在我们前进路上的很多细节,你我都不必再担心了。
对于本书中涉及新标准定义的新特性的那些部分,我们都已用一个特殊的图标标记出来了。我们希望这些提示标记对那些已经熟悉C++语言核心内容的读者是有帮助的,可以帮助他们决定将注意力投向哪里。对于那些可能尚不支持所有新特性的编译器,我们还希望这些图标能有助于解释这类编译器所给出的编译错误信息。这是因为虽然本书中几乎所有例子都已经用最新版本的GNU编译器编译通过,但我们知道一些读者可能尚未将编译器更新到最新版本。虽然新标准增加了大量新功能,但核心C++语言并未变化,这构成了本书的大部分内容。读者可以借助这些图标来判断哪些功能可能还没有被自己的编译器所支持。

为什么选择这本书?
现代C++语言可以看作是三部分组成的:
低级语言,大部分继承自 C 语言。
现代高级语言特性,允许我们定义自己的类型以及组织大规模程序和系统。
标准库,它利用高级特性来提供有用的数据结构和算法。
大多数 C++教材按照语言进化的顺序来组织其内容。首先讲授C++的C 子集,然后将C++的更为抽象的一些特性作为高级话题在书的最后进行介绍。这种方式存在两个问题:读者会陷入那些继承自低级程序设计的细节,从而由于挫折感而放弃;读者被强加学习一些坏习惯,随后又需要忘记这些内容。
我们采用一种相反的方法:从一开始就介绍一些语言特性,能让程序员忽略那些继承自低级程序设计的细节。例如,在介绍和使用内置的算术和数组类型时,我们还连同介绍和使用标准库中的类型string 和vector。使用这些类型的程序更易写、易理解且更少出错。
太多时候,标准库被当作一种“高级”话题来讲授。很多教材不使用标准库,而是使用基于字符数组指针和动态内存管理的低级程序设计技术。让使用这种低级技术的程序正确运行,要比编写相应的使用标准库的C++代码困难得多。
贯穿 C++ Primer 全书,我们都在强调好的风格:我们想帮助读者直接养成好的习惯,而不是在获得很多很复杂的知识后再去忘掉那些坏习惯。我们特别强调那些棘手的问题,并对常见的错误想法和陷阱提出警告。
我们还注意解释规则背后的基本原理——使读者不仅知其然,还能知其所以然。我们相信,通过体会程序的工作原理,读者会更快地巩固对语言的理解。
虽然你不必为了学习本书而掌握 C 语言,但我们还是假定你了解足够多的程序设计知识,了解至少一门现代分程序结构语言,知道如何用这门语言编写、编译以及运行程序。特别是,我们假定你已经使用过变量,编写、调用过函数,也使用过编译器。

第 5 版变化的内容
这一版C++ Primer 的新特点是用边栏图标来帮助引导读者。C++是一种庞大的编程语言,它提供了一些为特定程序设计问题定制的功能。其中一些功能对大型项目团队有很重要的意义,但对于小型项目开发可能并无必要。因此,并非每个程序员都需要了解每个语言特性的所有细节。我们加入这些边栏图标来帮助读者弄清哪些内容可以随后再学习,而哪些主题是更为重要的。
对于包含C++语言基础内容的章节,我们用一个小人正在读书的图标加以标记。用这个图标标记的那些章节,涵盖了构成语言核心部分的主题。每个人都应该阅读并理解这些章节的内容。
对于那些涉及高级主题或特殊目的主题的章节,我们也进行了标记。在首次阅读时,这些章节可以跳过或快速浏览。我们用一叠书的图标标记这些章节,指出在这些地方,你可以放心地放下书本。快速浏览这些章节可能是一个好主意,这样你就可以知道有这些特性存在。但在真正需要在自己的程序中使用这些特性之前,没有必要花费时间仔细学习这些主题。
为了进一步引导读者的注意力,我们还用放大镜图标标记了特别复杂的概念。我们希望读者对有这种标记的章节能多花费一些时间彻底理解其中的内容。在这些章节中,至少有一些,其主题的重要性可能不是那么明显;但我们认为,你会发现这些章节涉及的主题对理解C++语言原来至关重要。
交叉引用的广泛使用,是本书采用的另外一种阅读帮助。我们希望这些引用能帮助读者容易地翻阅书中的内容,同时还能在后面的例子涉及到前面的内容时容易地跳回到前面。
没有改变的是,C++ Primer 仍是一本清晰、正确、全面的C++入门教材。我们通过给出一系列复杂度逐步增加的例子来讲授这门语言,这些例子说明了语言特性,展示了如何充分用好C++语言。

本书的结构
我们首先在第I 部分和第II 部分中介绍了C++语言和标准库的基础内容。这两部分包含的内容足够你编写出有意义的程序,而不是只能写一些玩具程序。大部分程序员基本上都需要掌握本书这两部分所包含的所有内容。
除了讲授 C++的基础内容,第I 部分和第II 部分还有另外一个重要目的:通过使用标准库中定义的抽象设施,使你更加适应高级程序设计技术。标准库设施本身是一组抽象数据类型,通常用C++编写。用来设计标准库的,就是任何C++程序员都可以使用的用来构造类的那些语言特性。我们讲授C++语言的一个经验是,在先学习了使用设计良好的抽象类型后,读者会发现理解如何构造自己的类型更容易了。
只有在经过全面的标准库使用训练,并编写了各种标准库所支持的抽象程序后,我们才真正进入到那些允许你编写自己的抽象类型的C++特性中去。本书的第III 部分和第IV 部分介绍了如何编写类的形式的抽象类型。第III 部分包含基础内容,第IV 部分介绍更专门的语言特性。
在第III 部分中,我们将介绍拷贝控制问题,以及其他一些使类能像内置类型一样容易使用的技术。类是面向对象编程和泛型编程的基础,第III 部分也会介绍这些内容。第IV 部分是C++ Primer 的结束部分,它介绍了一些在组织大型复杂系统时非常有用的语言特性。此外,我们将在附录A 中总结标准库算法。

读者帮助
本书的每一章均以一个总结和一个术语表结束,两者一起扼要回顾了这一章的大部分学习重点。读者应该将这些部分作为个人备忘录:如果你不理解某个术语,可以重新学习这一章的相应部分。
在本书中我们还使用了其他一些学习辅助:
重要的术语用加粗字体显示;我们假定读者已经熟悉的重要术语用粗斜体显示。每个术语都会列在章末尾的术语表中。
贯穿全书,我们用高亮显示来提醒读者注意语言的重要部分,对常见的陷阱提出警告,建议好的程序设计习惯,以及提供一般性的使用提示。
为了更好地理解语言特性间和概念间的联系,我们提供大量向前的和向后的交叉引用。
对重要的概念和 C++新程序员常常觉得最困难的主题,我们提供边栏讨论。
学习任何程序设计语言都需要编写程序。为此,贯穿全书我们提供大量程序示例。

关于编译器的注意事项
在撰写本书时(2012 年7 月),编译器提供商正在努力工作,升级编译器以匹配最新的ISO 标准。我们使用最多的编译器是GNU 编译器4.7.0。本书中只有一小部分特性在此编译器中尚未实现:继承构造函数、成员函数的引用限定符以及正则表达式库。

致谢
我们要特别感谢标准委员会几位现任和前任委员:Dave Abrahams、Andy Koenig、Stephan T. Lavavej、Jason Merrill、John Spicer 和Herb Sutter 在准备本书的过程中提供的帮助。在理解新标准的一些更微妙之处,他们为我们提供了宝贵的帮助。我们还要感谢很多致力于升级GNU 编译器以实现新标准的人们。
与旧版C++ Primer 中一样,我们要感谢Bjarne Stroustrup 不知疲倦地为C++工作以及他和作者长时间的友谊。我们还要感谢Alex Stepanov 的非凡洞察力,催生了标准库核心的容器和算法。最后,我们要感谢C++标准委员会的所有委员,感谢他们这么多年来在净化、精炼和改进C++语言方面的辛苦工作。
我们衷心感谢审稿人:Marshall Clow、Jon Kalb、Nevin Liber、Dr. C. L. Tondo、Daveed Vandevoorde 和Steve Vinoski,他们建设性的意见帮助我们对全书做出了大大小小的改进。
本书是用 Latex 及其发行版本中的很多包来进行排版的,我们应该感谢Latex社区成员创造出如此强大的排版工具。
最后,我们要感谢Addison-Wesley 公司的优秀员工,他们指导了本书的整个出版过程:Peter Gordon,我们的编辑,他给了我们动力再次修改C++ Primer;Kim Boedigheimer,保证了一切按计划进行;Barbara Wood,她在编辑过程中找到了大量编辑错误;还有Elizabeth Ryan,很高兴再次和她共同工作,她指导我们完成了整个设计和生产流程。

内容简介
《C++ Primer英文版(第5版)》内容简介:这本久负盛名的C++经典教程,时隔八年之久,终迎来史无前例的重大升级。除令全球无数程序员从中受益,甚至为之迷醉的——C++大师Stanley B. Lippman的丰富实践经验,C++标准委员会原负责人Josée Lajoie对C++标准的深入理解,以及C++先驱Barbara E. Moo在C++教学方面的真知灼见外,更是基于全新的C++11标准进行了全面而彻底的内容更新。非常难能可贵的是,书中所有示例均全部采用C++11标准改写,这在经典升级版中极其罕见——充分体现了C++语言的重大进展极其全面实践。书中丰富的教学辅助内容、醒目的知识点提示,以及精心组织的编程示范,让《C++ Primer英文版(第5版)》在C++领域的权威地位更加不可动摇。无论是初学者入门,或是中、高级程序员提升,《C++ Primer英文版(第5版)》均为不容置疑的首选。

购买书籍

当当网购书 京东购书 卓越购书

PDF电子书下载地址

相关书籍

搜索更多