In A Tour of C++, Second Edition, Bjarne Stroustrup, the creator of C++, describes what constitutes modern C++. This concise, self-contained guide covers most major language features and the major standard-library components—not, of course, in great depth, but to a level that gives programmers a meaningful overview of the language, some key examples, and practical help in getting started.
Stroustrup presents the C++ features in the context of the programming styles they support, such as object-oriented and generic programming. His tour is remarkably comprehensive. Coverage begins with the basics, then ranges widely through more advanced topics, including many that are new in C++17, such as move semantics, uniform initialization, lambda expressions, improved containers, random numbers, and concurrency. The tour even covers some extensions being made for C++20, such as concepts and modules, and ends with a discussion of the design and evolution of C++.
This guide does not aim to teach you how to program (for that, see Stroustrup’s
Programming: Principles and Practice Using C++, Second Edition), nor will it be the only resource you’ll need for C++ mastery (for that, see Stroustrup’s
The C++ Programming Language, Fourth Edition, and recommended online sources). If, however, you are a C or C++ programmer wanting greater familiarity with the current C++ language, or a programmer versed in another language wishing to gain an accurate picture of the nature and benefits of modern C++, you can’t find a shorter or simpler introduction than this tour provides.
1. The Basics
1.1. Introduction
1.2. Programs
1.3. Hello, World!
1.4. Functions
1.5. Types, Variables, and Arithmetic
1.6. Scope and Lifetime
1.7. Constants
1.8. Pointers, Arrays, and References
1.9. Tests
1.10. Advice
2. User-Defined Types
2.1. Introduction
2.2. Structures
2.3. Classes
2.4. Unions
2.5. Enumerations
2.6. Advice
3. Modularity
3.1. Introduction
3.2. Separate Compilation
3.3. Namespaces
3.4. Error Handling
3.5. Advice
4. Classes
4.1. Introduction
4.2. Concrete Types
4.3. Abstract Types
4.4. Virtual Functions
4.5. Class Hierarchies
4.6. Copy and Move
4.7. Advice
5. Templates
5.1. Introduction
5.2. Parameterized Types
5.3. Function Templates
5.4. Concepts and Generic Programming
5.5. Function Objects
5.6. Variadic Templates
5.7. Aliases
5.8. Template Compilation Model
5.9. Advice
6. Library Overview
6.1. Introduction
6.2. Standard-Library Components
6.3. Standard-Library Headers and Namespace
6.4. Advice
7. Strings and Regular Expressions
7.1. Introduction
7.2. Strings
7.3. Regular Expressions
7.4. Advice
8. I/O Streams
8.1. Introduction
8.2. Output
8.3. Input
8.4. I/O State
8.5. I/O of User-Defined Types
8.6. Formatting
8.7. File Streams
8.8. String Streams
8.9. Advice
9. Containers
9.1. Introduction
9.2. vector
9.3. list
9.4. map
9.5. unordered_map
9.6. Container Overview
9.7. Advice
10. Algorithms
10.1. Introduction
10.2. Use of Iterators
10.3. Iterator Types
10.4. Stream Iterators
10.5. Predicates
10.6. Algorithm Overview
10.7. Container Algorithms
10.8. Advice
11. Utilities
11.1. Introduction
11.2. Resource Management
11.3. Specialized Containers
11.4. Time
11.5. Function Adaptors
11.6. Type Functions
11.7. Advice
12. Numerics
12.1. Introduction
12.2. Mathematical Functions
12.3. Numerical Algorithms
12.4. Complex Numbers
12.5. Random Numbers
12.6. Vector Arithmetic
12.7. Numeric Limits
12.8. Advice
13. Concurrency
13.1. Introduction
13.2. Tasks and threads
13.3. Passing Arguments
13.4. Returning Results
13.5. Sharing Data
13.6. Waiting for Events
13.7. Communicating Tasks
13.8. Advice
14. New Stuff
15. More New Stuff
15. History and Compatibility
15.1. History
15.2. C++11 Extensions
15.3. C/C++ Compatibility
15.4. Bibliography
15.5. Advice