“C++11/14 for C++03 Developers” is a two-day training course with programming examples taught by Vittorio Romeo. It is offered at the Gaylord Rockies from 9AM to 5PM on Saturday and Sunday, September 14th and 15th, 2019 (immediately prior to the conference). Lunch is included.
Not every company or developer team has had the luxury of migrating huge C++03 codebases to more modern standards of the language: projects might still have to support legacy architectures or there might have simply not been any push to update the toolchains and train employees. Experienced developers might be missing out on the improvements to the language!
Similarly, students or hobbyist developers might have learned C++ from sources only covering the 2003 standard of the language.
Independent of your background, if you are an experienced C++03 developer with minimal knowledge of C++11/14, then this is the course for you! All the C++11/14 language features and idioms will be explained and compared to their C++03 counterparts. Real code examples from large-scale commercial projects will be shown to demonstrate how modern standards can improve productivity and safety/flexibility of your codebase.
Throughout the class, you’ll work on upgrading a simplified `std::vector` implementation from C++03 to C++14, giving you a taste of Modern C++ library development.
After this course, regardless of whether you intend on leading the push to new modern standards in your workplace, or learn about Modern C++ for your side projects… you’ll end with a newfound love (or hate) for the language.
- Experience with C++03, including some familiarity with more advanced constructs such as templates.
- Knowledge of more arcane techniques such as SFINAE is not required.
- Introduction: background of the course, what the goals are, and how it is structured.
- Brief history on C++11/14, and how the ISO committee works.
- First assignment: making sure that everyone can compile a sample C++14 project.
- Fixed annoyances
- Double right angle bracket in templates `>>`
- General productivity improvements
- Type inference
- `enum class`
- Trailing return types
- Range-based `for` loops
- Non-member `begin` and `end`
- Raw string literals
- Uniform initialization
- List initialization
- Move semantics
- Rvalue references
- Pass-by-value & move idiom
- Smart pointers
- Class design
- Rule of 3/5/0
- Default member initializers
- Inherited/delegated constructors
- Ref qualifiers
- Perfect forwarding
- Variadic templates
- Generic lambdas
- Generalized lambda captures
- Compile-time programming
- Template aliases and `using`
- SFINAE and “expression SFINAE”
- Useful additions to the Standard Library
- `explicit` conversions
- `alignof` and `alignas`
Vittorio Romeo (B.Sc. Computer Science) has been a Software Engineer at Bloomberg for more than 3 years, working on mission-critical company C++ infrastructure and providing Modern C++ training to hundreds of fellow employees.
When he’s not writing code, Vittorio enjoys weightlifting and fitness-related activities, competitive/challenging computer gaming and sci-fi movies/TV-series.