A list of C++ topics
In Jason Turner’s C++ Weekly Ep 348, he listed out an extensive C++ topics. Understanding these topics makes equips you with expert level C++ knowledge. BUT DOES NOT make you in C++ (programming). The entire video is about building a lambda function, from simple to complex, and different versions.
Here is list of topics:
- lambdas (C++11)
- struct (C++98)
- constexpr (C++11)
- operator overloading (C++98)
- call operator (C++98)
- const member functions (C++98)
- braced initialization (C++11)
auto
return type deduction (C++14)- “compiler magic” at 3:33 he says “because inside our the call operator overload we cannot see the
*this
pointer of the lambda” - function parameters (C++98)
- pass-by-value (C++98)
- attributes on parameters (C++11) e.g.
[[maybe_unsed]]
- pass-by-reference (C++98)
- pass-by-value vs pass-by-reference (C++98)
- pre-increment vs post-increment
- trailing return types (C++11)
- class vs struct (C++98)
- private vs public (C++98)
- implicit conversions (C++98)
- function pointers (C++98)
- static member functions (C++98)
- using aliases (C++11)
- efficiency when chaining functions, 6:35 generic lambdas (C++14)
- templates (C++98)
- template argument type deduction (C++98)
- aias templates (C++11)
- template instantiations (C++98)
noexcept
(C++11)noexcept
in the type system (C++17)- variadic templates (C++11)
- variadic lambdas (C++14)
- fold expressions (C++17)
- function attributes (C++11)
- concepts (C++20) 8:47 to constrain the lambdas
- non-type template parameters (C++98)
- integer sequences (C++11)
- template parameter pattern matching (C++98)
- explicit lambda templates (C++17)
- tuples (C++11)
- unpacking of tuples (C++11)
- variadic
sizeof...()
operator (C++11) - direct-initialization of members (C++11)
mutable
keyword (C++98)- non-
const
member functions (C++98) - reference members (C++98)
- member copies (C++98)
- object layout (C++98)
- member padding (C++98)
- order of construction/destruction (C++98)
- generalized lambda capture (C++14)
- immediately invoked lambdas (C++11)
- return value optimization (C++98)
- guaranteed return value optimization (C++17)
- initializer_list (C++11)
- recursive lambda (C++23)
- deducing
this
(C++23) - recursive functions
- trivially copyable types (C++98)
- higher order functions
- dangling references
- undefined behavior 16:10 overloaded lambdas
- inheritance (C++98)
- multiple inheritance (C++98)
- function hiding (C++98)
- variadic
using
declarations (C++17) - scoping / lookup rules (C++98)
- class template argument deduction (C++17/C++20)
- deduction guides (C++17)
- algorithms (C++11)
- ranges (C++20)
<functional>
(C++11)- virtual member functions (C++98)
- member function pointers (C++98)
- special member functions (C++98/11)
- member function call syntax (C++98)
- type erasure (C++98)
- dynamic vs automatic storage (C++98)
- Missing
- writing your own concepts?
- type traits?
- operator <=>?
- protected?
- virtual inheritance
- compilation model
- ODR violations
- preprocessor
- project structure and layout
- the breadth of the standard library
- variable templates
- coroutines
- modules
From the comments of an user @darkmagic543, there are additional topics:
- exceptions, catch ellipse
- structured binding
- forward declaration
- namespaces
- rules of 5, default and nontrivial/virtual destructors
- memory, pointers and smart pointers
- iterators and writing your own iterator
- multithreading
- numeric
- explicit/implicit conversions
- castings, slicing
- variant & visitor
- abstract class (pure virtual), delete, final // default as well?
- consteval
- packages & libraries, cmake
- signed/unsigned arithmetic, bitwise operations, bitset
That is quite a list of topics.Jason has concluded at the end of the video, “and hopefully you can use this as a starting point for getting that expert levels C++ knowledge that you’ve been looking for”. This is what I am trying to achieve.
I know some of these topics, but it is my goal to know them all. I will use this as a check list of the progression of my C++ learning journey.