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):

Moving, And RValue References (And Perfect Forwarding 👏)

Moving

Best explained in a live hacking session (from Move Semantics, Rvalue References)

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:

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