04 / Guides
Modern C++ Recovery Guide
Modern C++ Recovery Guide
A quick, practical wiki for someone who learned C++ around 2008 and wants to recover quickly into modern C++17/20.
How to Use This Wiki
Go through the pages in order. Do not try to memorize everything. For each topic, aim to understand:
- What problem does this solve?
- What does modern C++ prefer?
- What are the common failure modes?
- Can I write a tiny example from memory?
Recommended Path
Phase 1 — Rebuild the Core
- Mental Model: Modern C++
- Compilation, Linking, and Project Shape
- Object Lifetime, Stack, Heap, and RAII
- Ownership, Raw Pointers, and Smart Pointers
- Value Semantics and Rule of 0/3/5
Phase 2 — Modern Language Features
- Move Semantics
- Const, References, and Parameter Passing
- STL Containers and Algorithms
- Modern Syntax: auto, Lambdas, enum class, constexpr
- Optional, Variant, String View, Span, Filesystem, Chrono
- Templates and Generic Programming
Phase 3 — Serious C++
- Error Handling and Exception Safety
- Concurrency: Threads, Mutexes, Atomics
- Undefined Behavior and Memory Safety
- Performance Fundamentals
- Tooling: CMake, Debuggers, Sanitizers, Testing
Phase 4 — Pick a Domain
Fastest Practical Plan
If you want a 30-day sprint:
- Week 1: RAII, ownership, smart pointers, value semantics.
- Week 2: move semantics, STL, lambdas, modern syntax.
- Week 3: CMake, debugging, sanitizers, tests, concurrency basics.
- Week 4: build one serious project.
Default Target Stack
If you do not know where to start, aim for:
C++17/20 + Linux + CMake + gdb/lldb + sanitizers + GoogleTest/Catch2 + Python for automation.
That combination gives you a durable technical foundation and keeps you productive.
Grounding
This is a quick recovery guide, not a substitute for the standard or a full textbook. For authoritative references and version notes, see Grounding and References.
01 — Modern C++ Mental Model
Modern C++ is not “C with classes.” It is a language for building efficient systems using explicit ownership, deterministic cleanup, value semantics, and z
02 — Compilation, Linking, and Project Shape
C++ is usually built in separate translation units. Understanding the build process saves hours of confusion.
03 — Object Lifetime, Stack, Heap, and RAII
C++ is a lifetime language. To write good C++, you must know when objects are created, when they are destroyed, and who owns resources.
04 — Ownership, Raw Pointers, and Smart Pointers
Modern C++ code should make ownership obvious.
05 — Value Semantics and Rule of 0/3/5
Modern C++ prefers types that behave like values. A good type can be copied, moved, stored in containers, returned from functions, and destroyed safely.
06 — Move Semantics
Move semantics let C++ transfer resources instead of copying them.
07 — Const, References, and Parameter Passing
Function signatures should communicate ownership, mutation, and optionality.
08 — STL Containers and Algorithms
The standard library is the default toolbox. Modern C++ code should use containers and algorithms instead of manual memory and hand-written loops everywher
09 — Modern Syntax: auto, Lambdas, enum class, constexpr
Use `auto` when the type is obvious or verbose.
10 — Modern Library Types
Use when a value may or may not exist.
11 — Templates and Generic Programming
Templates let you write code that works with many types while still being compiled into efficient type-specific code.
12 — Error Handling and Exception Safety
C++ has multiple error handling styles. The right one depends on the domain.
13 — Concurrency: Threads, Mutexes, Atomics
Concurrent code lets multiple things happen at once, but introduces data races, deadlocks, ordering issues, and debugging pain.
14 — Undefined Behavior and Memory Safety
Undefined behavior means the C++ standard places no requirements on what happens. The program may appear to work, crash, corrupt data, or become vulnerable
15 — Performance Fundamentals
C++ gives you control over performance, but you must measure. Guessing is unreliable.
16 — Tooling: CMake, Debuggers, Sanitizers, Testing
Modern C++ skill includes tooling. Real C++ work is not just language syntax.
17 — Domain Tracks
C++ becomes most valuable when attached to a serious domain. Do not learn endless syntax in isolation.
18 — Project Ideas
A serious project beats passive study. Pick one project that forces you to use modern C++ features, tooling, debugging, and domain concepts.
19 — Quick Checklist
Use this as a fast self-assessment.
20 — Grounding and References
Authoritative references used to ground the Modern C++ Recovery Guide.