C++ is a complex and complicated programming language. When used correctly, it delivers the best possible performance. Unfortunately, it is often misused, which is a source of many problems.
However, it turns out that in the case of conscious usage of selected language features, it can be relatively easy to produce high-quality software that delivers excellent runtime performance and is error-proof. Such a coding style is called Modern C++.
The training targets developers with professional experience with C++ programming language who know the problems caused by careless ways of coding in this language. The workshop aims to strengthen the knowledge of the C++ language and show how to avoid many problems that often appear in the production code.
This training should be considered mandatory training for all C++ developers and code architects. It is a foundation for all other C++ trainings offered by Train IT.
TRAINING HIGHLIGHTS
- Emphasis on understanding the philosophy and mechanisms of C++ programming language and learning how to reuse this knowledge in own code
- Particular focus on the usage of C++ templates in practical tasks
- Development of error-unfriendly code
- Selection of useful patterns and techniques that prove in a demanding production code
TRAINING AGENDA
The following plan is an initial proposal for the training material. The final agenda is always created based on the individual pre-training analysis of the client's requirements and constraints.
- C++ Basics for Experts
- Identifiers and naming conventions
- Namespaces
- C++ Types and their properties
- Value vs reference semantics
- Pointers vs references
- Unscoped vs scoped enumerations
- Classes and friends
- Special Member Functions
- Rule of Three, Five, and Zero
- Value categories
- Automatic type deduction
- Type conversions
- Objects
- Alignment
- Scope
- Lifetime
- ODR and inline
- Storage duration
- Stack vs Heap vs Free Store
- Initialization
- Name Lookup
- Overload Resolution
- Customization points
- Range-based for loop
- Coding with performance in mind
- Things to avoid on a fast path
- Copy elision
- Move semantics
- Ref-qualifiers
- noexcept
- constexpr
- Source code vs hardware - introduction
- Utilities that every C++ developer should know and use
- Lambda expressions
- std::function
- Algorithms
- RAII
- Smart pointers
- std::string_view
- std::span
- std::optional
- std::variant
- std::expected
- std::tuple
- Templates demystified
- Class, function, variable, and alias templates
- Parameters and arguments
- Explicit and partial specialization
- Explicit and implicit instantiation
- Template argument deduction
- Variadic templates
- Fold-expressions
- Structured binding
- Dependent names
- SFINAE