C++ Training: Using Modern C++ Safely and Effectively
Three days that turn C++ which still looks like C with classes into modern C++. With a clear eye on which language features genuinely cost nothing on constrained hardware – and which ones do.
- Level
- Intermediate
- Duration
- 3 days
- Formats
- On-site · Remote
Focus areas
- Move semantics & RAII
- Smart pointers & ownership
- Templates & concepts
- Ranges, lambdas, constexpr
Who this training is for
Engineers using C++ productively while largely working to a standard set years ago. The typical picture is a grown codebase with manual memory management, raw pointers and comments explaining who is responsible for what – things that more modern C++ expresses in the type system rather than in prose.
Equally for teams who have already raised the standard but use the new features only sporadically, because it is unclear what they cost.
Contents
Day 1 – Resources and ownership. RAII as a founding principle, not a matter of style. Move semantics: what actually happens, when the compiler applies them, and why a badly written constructor quietly prevents them. Smart pointers and the question behind them: who owns this object, and for how long. We rework example code together and turn ownership from comments into types.
Day 2 – Abstraction without runtime cost. Templates beyond containers, constexpr and what can be settled at compile time. Concepts as readable requirements on template parameters – the point where error messages become comprehensible again. Ranges and algorithms in place of hand-written loops. Throughout, with attention to what ends up in the generated code.
Day 3 – Robustness in daily work. Error handling: exceptions, return types and the trade-off behind them, particularly where exceptions are disabled in the project. Concurrency: threads, locks, atomics and the usual traps. Tools that find bugs before the customer does – sanitizers, static analysis, unit tests as part of design.
What your team can do afterwards
Express ownership in the type system rather than in comments. Judge whether an abstraction costs anything at runtime – and measure it when in doubt. Write templates whose error messages stay readable. And in an existing codebase, decide on solid grounds which modernization pays off and which is merely motion.
Prerequisites
Practical C++ experience. Familiarity with classes, inheritance and templates at usage level. Knowledge of the newer standards is not required – that is the point.
Format and delivery
Three days, on site or remote. The hands-on share is high: we rework prepared code together rather than demonstrating language features in isolation.
For teams with an embedded focus we go deeper on code size, allocation and real-time behaviour – the background is in our article on modern C++ for embedded systems.
Frequently asked questions
- Which standard do you teach?
- The focus is C++17 as the widely available baseline, with the practically relevant additions from C++20 and C++23. Which standard is realistic for you depends on your toolchain's compiler – we establish that beforehand and pitch the content accordingly.
- Is the training suitable for embedded development?
- Yes, that is our angle. Throughout, we address what a language feature costs at runtime and in code size, and we cover the points that come up repeatedly in embedded projects: exceptions, RTTI, dynamic allocation and how to keep it out of the hot path.
- Our team is at mixed levels. Does that work?
- Up to a point, and we plan for it: each exercise has a core and an extension so more experienced participants are not left waiting. With a very wide gap, splitting into two groups is the better route – we will say so honestly beforehand.
- Do you cover testing and tooling?
- Yes, to the extent they are part of writing good C++: unit tests as part of design, sanitizers for exposing memory and concurrency bugs, static analysis. Not a separate tooling course, but the tools that make the difference.
Articles on this topic
Going deeper, from our blog – the same topics at length.
Modern C++ (17/20/23) for Embedded Systems
How C++17, C++20 and C++23 make embedded software safer and clearer at little to no runtime cost — applied with discipline for constrained targets.
- C++
- Modern C++
- Embedded
Real-Time Linux: What PREEMPT_RT Delivers – and What It Does Not
Determinism, not speed: how PREEMPT_RT makes Linux real-time capable, how to measure latency credibly with cyclictest, and which system and application mistakes undo every bit of tuning.
- Real-Time
- PREEMPT_RT
- Embedded Linux
Qt as a Cornerstone for Multiplatform Environments
One codebase for embedded, desktop and mobile: how Qt enables true multiplatform products through a consistent separation of logic and UI.
- Qt
- Multiplatform
- C++
Other trainings
Qt & QML in Practice
A hands-on introduction to the Qt world: building applications with Qt Quick and QML, connecting C++ logic and designing performant user interfaces.
2 daysEmbedded Linux Fundamentals
Understand the anatomy of an Embedded Linux system – from bootloader and kernel to the root filesystem and your own application on real hardware.
3 daysYocto Project Intensive
Build your own Linux distribution with the Yocto Project: BitBake, custom layers and recipes, image customization and reproducible builds in CI.
2 daysGit & Version Control
Version control that holds up in a team: branching strategies, a clean history, code review workflows and how to handle the situations where Git hurts.
This training for your team?
Tell us how many participants, where they stand and your timeframe – we'll come back with a proposal and dates.
Start a project