Description
Book SynopsisRainer Grimm has worked as a software architect, team lead, and instructor since 1999, and offered seminars on C++, Python, and proprietary software since 2002. He writes regularly on C++, Python, and Haskell, speaks at conferences on programming issues, and blogs weekly in English (modernescpp.com) and German (www.grimm-jaud.de/index.php/blog). Now an independent instructor, he offers seminars on modern C++ and Python. He has authored several books on modern C++, concurrency, and related topics.
Table of ContentsList of selected C++ Core Guidelines xiii List of figures xxiii List of tables xxvii Foreword xxix Preface xxxi Acknowledgments xxxvii About the author xxxix Part I: The Guidelines 1 Chapter 1: Introduction 3 Target readership 3
Aim 4
Non-aims 4
Enforcement 4
Structure 4
Major sections 5
Chapter 2: Philosophy 7 Chapter 3: Interfaces 15 The curse of non-const global variables 16
Dependency injection as a cure 18
Making good interfaces 20
Related rules 25
Chapter 4: Functions 27 Function definitions 28
Parameter passing: in and out 32
Parameter passing: ownership semantics 38
Value return semantics 42
Other functions 46
Related rules 52
Chapter 5: Classes and Class Hierarchies 53 Summary rules 54
Concrete types 58
Constructors, assignments, and destructors 59
Class hierarchies 98
Overloading and overloaded operators 117
Unions 126
Related rules 129
Chapter 6: Enumerations 131 General rules 131
Related rules 137
Chapter 7: Resource Management 139 General rules 140
Allocation and deallocation 145
Smart pointers 150
Related rules 164
Chapter 8: Expressions and Statements 165 General 166
Declarations 168
Expressions 186
Statements 199
Arithmetic 204
Related rules 210
Chapter 9: Performance 213 Wrong optimizations 214
Wrong assumptions 214
Enable optimization 218
Related rules 230
Chapter 10: Concurrency 231 General guidelines 232
Concurrency 245
Parallelism 266
Message passing 269
Lock-free programming 273
Related rules 277
Chapter 11: Error Handling 279 Design 281
Implementation 283
If you can't throw 288
Related rules 292
Chapter 12: Constants and Immutability 293 Use const 294
Use constexpr 298
Chapter 13: Templates and Generic Programming 301 Use 302
Interfaces 305
Definition 320
Hierarchies 330
Variadic templates 332
Metaprogramming 336
Other rules 362
Related rules 372
Chapter 14: C-Style Programming 375 Entire source code available 376
Entire source code not available 378
Chapter 15: Source Files 383 Interface and implementation files 384
Namespaces 391
Chapter 16: The Standard Library 397 Containers 398
Text 404
Input and output 411
Related rules 419
Part II: Supporting Sections 421 Chapter 17: Architectural Ideas 423 Chapter 18: Nonrules and Myths 427 Chapter 19: Profiles 437 Pro.typeType safety 438
Pro.boundsBounds safety 439
Pro.lifetimeLifetime safety 439
Chapter 20: Guidelines Support Library 441 Views 441
Ownership pointers 442
Assertions 443
Utilities 443
Part III: Appendixes 445 Appendix A: Enforcing the C++ Core Guidelines 447 Visual Studio 448
clang-tidy 450
Appendix B: Concepts 453 Appendix C: Contracts 457 Index 459