C++ is a hard 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 with great performance and resistance to programming errors. Such a coding style is called Modern C++.
The training targets the developers who already have professional experience with C++ programming language and who know the problems caused by the careless way of coding in this language. The workshop aims to strengthen the knowledge about the C++ language and show how to avoid many of the problems that often appear in the production code.
This training should be considered a 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
- C++ Types and their properties
- Type conversions
- Value categories
- Objects
- Alignment
- Scope
- Lifetime
- ODR
- Storage duration
- Initialization
- Name Lookup
- Overload Resolution
- Customization points
- Range-based for loop
- Special Member Functions
- Rule of Three, Five, and Zero
- 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
- Smart pointers
- std::string_view
- std::optional
- std::tuple
- std::variant
- 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