Agenda: C++: A Thorough Overview (2024-06-03)#

Introduction: A New Language To Me#

Range Based for Loops#

Tuple Unpacking (err, Structured Binding)#

C++ Pythonic Toolcase#

Brace Initialization (std::initializer_list<>)#

From Brace Initialization (Uniform Initialization)

New OO keywords: override, final, default, delete#

Functions: std::function<>, Lambdas#

Strongly Typed enum#

Delegating Constructor#

nullptr#

Smart Pointers: std::shared_ptr<>, std::unique_ptr<> (And A Little std::move)#

From Smart Pointers: std::unique_ptr, std::shared_ptr (And std::weak_ptr):

Moving, And RValue References (And Perfect Forwarding 👏)#

Moving#

Best explained in a live hacking session (from :doc:/trainings/material/soup/cxx11/new-language-features/move/index`)

Something Similar But Completely Different: Perfect Forwarding#

&& is not always what you think 👎

  • Perfect Forwarding (a feature which shares the syntax with moving in that it uses &&, but is something completely different)

Unit Testing With googletest#

From Unit Testing With googletest:

Multithreading#

From Multithreading, C++ Memory Model:

Miscellaneous#

Strings#

constexpr, constinit, consteval#

Code (And Project) Sanity#

  • Best practices ⟶ C++ Core Guidelines |:laughing:|

  • const, opinionated (was: why shoud I initialize members in an initializer list and not in the constructor body?)

  • Memory leaks and uninitialized memory ⟶ valgrind

  • Metrics and static code analysis

Clean Code, Design Patterns#