Preface xi Chapter 1: The Basics 1 1.1 Introduction 1 1.2 Programs 2 1.3 Functions 4 1.4 Types, Variables, and Arithmetic 5 1.5 Scope and Lifetime 9 1.6 Constants 10 1.7 Pointers, Arrays, and References 11 1.
8 Tests 14 1.9 Mapping to Hardware 16 1.10 Advice 19 Chapter 2: User-Defined Types 21 2.1 Introduction 21 2.2 Structures 22 2.3 Classes 23 2.4 Enumerations 25 2.5 Unions 27 2.
6 Advice 28 Chapter 3: Modularity 29 3.1 Introduction 29 3.2 Separate Compilation 30 3.3 Namespaces 35 3.4 Function Arguments and Return Values 37 3.5 Advice 42 Chapter 4: Error Handling 43 4.1 Introduction 43 4.2 Exceptions 44 4.
3 Invariants 45 4.4 Error-Handling Alternatives 47 4.5 Assertions 48 4.6 Advice 51 Chapter 5: Classes 53 5.1 Introduction 53 5.2 Concrete Types 54 5.3 Abstract Types 60 5.4 Virtual Functions 62 5.
5 Class Hierarchies 63 5.6 Advice 69 Chapter 6: Essential Operations 71 6.1 Introduction 71 6.2 Copy and Move 74 6.3 Resource Management 78 6.4 Operator Overloading 80 6.5 Conventional Operations 81 6.6 User-Defined Literals 84 6.
7 Advice 85 Chapter 7: Templates 87 7.1 Introduction 87 7.2 Parameterized Types 88 7.3 Parameterized Operations 93 7.4 Template Mechanisms 99 7.5 Advice 102 Chapter 8: Concepts and Generic Programming 103 8.1 Introduction 103 8.2 Concepts 104 8.
3 Generic Programming 112 8.4 Variadic Templates 114 8.5 Template Compilation Model 117 8.6 Advice 117 Chapter 9: Library Overview 119 9.1 Introduction 119 9.2 Standard-Library Components 120 9.3 Standard-Library Organization 121 9.4 Advice 124 Chapter 10: Strings and Regular Expressions 125 10.
1 Introduction 125 10.2 Strings 125 10.3 String Views 128 10.4 Regular Expressions 130 10.5 Advice 136 Chapter 11: Input and Output 137 11.1 Introduction 137 11.2 Output 138 11.3 Input 139 11.
4 I/O State 141 11.5 I/O of User-Defined Types 141 11.6 Output Formatting 143 11.7 Streams 146 11.8 C-style I/O 149 11.9 File System 150 11.10 Advice 154 Chapter 12: Containers 157 12.1 Introduction 157 12.
2 vector 158 12.3 list 162 12.4 forward_list 164 12.5 map 164 12.6 unordered_map 165 12.7 Allocators 167 12.8 Container Overview 168 12.9 Advice 170 Chapter 13: Algorithms 173 13.
1 Introduction 173 13.2 Use of Iterators 175 13.3 Iterator Types 178 13.4 Use of Predicates 181 13.5 Algorithm Overview 181 13.6 Parallel Algorithms 183 13.7 Advice 183 Chapter 14: Ranges 185 14.1 Introduction 185 14.
2 Views 186 14.3 Generators 188 14.4 Pipelines 188 14.5 Concepts Overview 190 14.6 Advice 194 Chapter 15: Pointers and Containers 195 15.1 Introduction 195 15.2 Pointers 196 15.3 Containers 201 15.
4 Alternatives 208 15.5 Advice 212 Chapter 16: Utilities 213 16.1 Introduction 213 16.2 Time 214 16.3 Function Adaption 216 16.4 Type Functions 217 16.5 source_location 222 16.6 move() and forward() 223 16.
7 Bit Manipulation 224 16.8 Exiting a Program 225 16.9 Advice 225 Chapter 17: Numerics 227 17.1 Introduction 227 17.2 Mathematical Functions 228 17.3 Numerical Algorithms 229 17.4 Complex Numbers 230 17.5 Random Numbers 231 17.
6 Vector Arithmetic 233 17.7 Numeric Limits 234 17.8 Type Aliases 234 17.9 Mathematical Constants 234 17.10 Advice 235 Chapter 18: Concurrency 237 18.1 Introduction 237 18.2 Tasks and threads 238 18.3 Sharing Data 241 18.
4 Waiting for Events 243 18.5 Communicating Tasks 245 18.6 Coroutines 250 18.8 Advice 253 Chapter 19: History and Compatibility 255 19.1 History 255 19.2 C++ Feature Evolution 263 19.3 C/C++ Compatibility 268 19.4 Bibliography 271 19.
5 Advice 274 Appendix: Module std 277 A.1 Introduction 277 A.2 Use What Your Implementation Offers 278 A.3 Use Headers 278 A.4 Make Your Own module std 278 A.5 Advice 279 Index 281.