Modern C++: When Efficiency Matters [2021 class archive]

Modern C++: When Efficiency Matters is a three-day online training course with programming exercises taught by Andreas Fertig. It is offered online from 09:00 to 15:00 Aurora time (MDT), 11:00 to 17:00 EDT,  17:00 to 23:00 CET, Wednesday, October 20th through Friday, October 22nd, 2021 (before the conference).

Course Description

You want to learn how to write efficient C++ because you

  • Care for the speed of your product?
  • Like to write robust code?
  • Write code for a constrained device?

Then consider this class! You will learn about various features of modern C++, how they work, where to use them, and how they translate to code. With that knowledge, you understand what each feature brings you and its costs regarding code size and performance.

You will learn how to write less code and get the same result. Less code helps you to save human resources when it comes to maintenance and debugging.

In times where a lot of applications are battery-powered, saving run-time is a great asset. As part of this class, you will learn to control the footprint and the speed of your binary.

Prerequisites

Students are expected to have a basic knowledge of C++11.

Course Topics

  • Type-deduction surprises
  • Range-based for-loops how they work and what you have to watch out for
  • How noexcept helps you
  • How a std::initializer_list works
  • Scope control using if or switch with initialization
  • Safe and efficient constructors
    • In-class member initialization
    • Constructor inheritance and its trap
  • Under the hood of lambdas
    • Lambda captures and their implications
    • Generic as well as templated (a preview into C++20)
  • Structured bindings
  • Templates
    • Variadic templates
    • Recursive variadic templates vs. fold-expressions
    • Guidelines for efficient use of templates
  • De-virtualize your virtual functions with `final`
  • How a local non-trivial `static` variable works
  • The power of compile-time vs. run-time
    • How and when to apply constexpr
    • How to achieve constant initialization
    • Select only the data you need with constexpr if
  • Move-semantics
    • Move or copy?
    • The difference between std::move vs std::forward
    • Make your move-operations noexcept: noexcept, move, and STL containers
  • Know the costs of the abstraction: shared-/unique-ptr
  • Using the STL efficiently
    • Chose the right container for your data
    • Best to use container methods for performance

Register Here

Course Instructor

Andreas Fertig

Andreas Fertig, CEO of Unique Code GmbH, is an experienced trainer and lecturer for C++ for standards 11 to 20.

Andreas is involved in the C++ standardization committee, in which the new standards are developed. At international conferences, he presents how code can be written better. He publishes specialist articles, e.g., for iX magazine, and has published several textbooks on C++.

With C++ Insights (https://cppinsights.io), Andreas has created an internationally recognized tool that enables users to look behind the scenes of C++ and thus to understand constructs even better.

Before working as a trainer and consultant, he worked for Philips Medizin Systeme GmbH for ten years as a C++ software developer and architect focusing on embedded systems.