Skip to content

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.

· 8 min read

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
Read more
· 7 min read

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
Read more
Related service: C++ Software Engineering Learn more →

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