diff --git a/01.Introduction.pdf b/01.Introduction.pdf index 887cc1f..a246f94 100644 Binary files a/01.Introduction.pdf and b/01.Introduction.pdf differ diff --git a/02.Basic_Concepts_I.pdf b/02.Basic_Concepts_I.pdf index 0172f94..a312e15 100644 Binary files a/02.Basic_Concepts_I.pdf and b/02.Basic_Concepts_I.pdf differ diff --git a/03.Basic_Concepts_II.pdf b/03.Basic_Concepts_II.pdf index 97766be..00529d2 100644 Binary files a/03.Basic_Concepts_II.pdf and b/03.Basic_Concepts_II.pdf differ diff --git a/04.Basic_Concepts_III.pdf b/04.Basic_Concepts_III.pdf index f3133ca..1745f76 100644 Binary files a/04.Basic_Concepts_III.pdf and b/04.Basic_Concepts_III.pdf differ diff --git a/05.Basic_Concepts_IV.pdf b/05.Basic_Concepts_IV.pdf index 9a99fa8..102ead8 100644 Binary files a/05.Basic_Concepts_IV.pdf and b/05.Basic_Concepts_IV.pdf differ diff --git a/06.Object_Oriented_I.pdf b/06.Object_Oriented_I.pdf index 3ed8daf..f0dc117 100644 Binary files a/06.Object_Oriented_I.pdf and b/06.Object_Oriented_I.pdf differ diff --git a/07.Object_Oriented_II.pdf b/07.Object_Oriented_II.pdf index 15856b8..94cd1fa 100644 Binary files a/07.Object_Oriented_II.pdf and b/07.Object_Oriented_II.pdf differ diff --git a/08.Templates_I.pdf b/08.Templates_I.pdf index 9699ca1..a61cd05 100644 Binary files a/08.Templates_I.pdf and b/08.Templates_I.pdf differ diff --git a/09.Templates_II.pdf b/09.Templates_II.pdf index 9be5d60..9927fd7 100644 Binary files a/09.Templates_II.pdf and b/09.Templates_II.pdf differ diff --git a/10.Translation_Units.pdf b/10.Translation_Units.pdf index f6ddd34..d599ed1 100644 Binary files a/10.Translation_Units.pdf and b/10.Translation_Units.pdf differ diff --git a/11.Code_Convention.pdf b/11.Code_Convention.pdf index 99f9a03..11adb79 100644 Binary files a/11.Code_Convention.pdf and b/11.Code_Convention.pdf differ diff --git a/12.Ecosystem.pdf b/12.Ecosystem.pdf index d978f2b..cb9296a 100644 Binary files a/12.Ecosystem.pdf and b/12.Ecosystem.pdf differ diff --git a/13.Utilities.pdf b/13.Utilities.pdf index 128fa2f..c9d5469 100644 Binary files a/13.Utilities.pdf and b/13.Utilities.pdf differ diff --git a/14.Iterators_Containers_Alg.pdf b/14.Iterators_Containers_Alg.pdf index 485e2e1..62d8b25 100644 Binary files a/14.Iterators_Containers_Alg.pdf and b/14.Iterators_Containers_Alg.pdf differ diff --git a/15.Advanced_Topics.pdf b/15.Advanced_Topics.pdf index 54010ea..80c06df 100644 Binary files a/15.Advanced_Topics.pdf and b/15.Advanced_Topics.pdf differ diff --git a/16.Optimization_I.pdf b/16.Optimization_I.pdf index 6cd4a20..a7480e7 100644 Binary files a/16.Optimization_I.pdf and b/16.Optimization_I.pdf differ diff --git a/17.Optimization_II.pdf b/17.Optimization_II.pdf index f0358ec..3b61851 100644 Binary files a/17.Optimization_II.pdf and b/17.Optimization_II.pdf differ diff --git a/18.Optimization_III.pdf b/18.Optimization_III.pdf index 55e174b..6c92307 100644 Binary files a/18.Optimization_III.pdf and b/18.Optimization_III.pdf differ diff --git a/README.md b/README.md index 1c3b6da..3aff48e 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@

-## C++11 / C++14 / C++17 / C++20 +## C++11 / C++14 / C++17 / C++20 / (C++23) This *open-access* course is directed at those who are already familiar with C and object-oriented programming towards a proficiency level of C++ programming. The course covers the basics of C++ programming and moves on to advanced C++ semantics and concepts. @@ -47,18 +47,18 @@ If you enjoy the course or you find it useful, please add a **Star** | **1** | **[Introduction](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/01.Introduction.pdf)** | History of C/C++, Areas of Applications, Course introduction | | **2** | **[Basic Concepts I - Fundamental Types](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/02.Basic_Concepts_I.pdf)** | Integral data types, floating-point, operators, and conversion | | **3** | **[Basic Concepts II - Entities and Control Flow](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/03.Basic_Concepts_II.pdf)** | Enumerators, structures, control flow statements | -| **4** | **[Basic Concepts III - Memory Management](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/04.Basic_Concepts_III.pdf)** | Heap, Stack, pointers, references, const property, conversion operators | +| **4** | **[Basic Concepts III - Memory Management](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/04.Basic_Concepts_III.pdf)** | Heap, Stack, pointers, references, const properties, conversion operators | | **5** | **[Basic Concepts IV - Functions and Preprocessing](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/05.Basic_Concepts_IV.pdf)** | Functions, lambda expressions, preprocessing directives | | **6** | **[C++ Object Oriented Programming I - Class Concepts](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/06.Object_Oriented_I.pdf)** | Class hierarchy, constructor, destructor, class keywords | | **7** | **[C++ Object Oriented Programming II - Polymorphism and Operator Overloading](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/07.Object_Oriented_II.pdf)** | Polymorphism, operators overloading | | **8** | **[C++ Templates and Meta-programming I - Function Templates and Compile-Time Utilities](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/08.Templates_I.pdf)** | Function template, type traits | | **9** | **[C++ Templates and Meta-programming II - Class Templates and SFINAE](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/09.Templates_II.pdf)** | Class template, SFINAE | -| **10** | **[Translation Units](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/10.Translation_Units.pdf)** | Dealing with multiple translation units and files, namespace | +| **10** | **[Translation Units](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/10.Translation_Units.pdf)** | Dealing with multiple translation units and files, namespace, `#include`, module | | **11** | **[Code Conventions](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/11.Code_Convention.pdf)** | Project organization and main code conventions | | **12** | **[Ecosystem](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/12.Ecosystem.pdf)** | Debugging, testing, building, documenting tools | | **13** | **[Utilities](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/13.Utilities.pdf)** | Main `std` libraries | -| **14** | **[Containers, Iterators, and Algorithms](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/14.Iterators_Containers_Alg.pdf)** | Containers, iterators, algorithms | -| **15** | **[Advanced Topics](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/15.Advanced_Topics.pdf)** | Move semantics, error handling, C++ idioms | +| **14** | **[Containers, Iterators, and Algorithms](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/14.Iterators_Containers_Alg.pdf)** | Containers, iterators, algorithms, ranges | +| **15** | **[Advanced Topics](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/15.Advanced_Topics.pdf)** | Move semantics, error handling, C++ idioms, exceptions | | **16** | **[Optimization I - Basic Concepts](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/16.Optimization_I.pdf)** | Ahmdal Law, performance bounds, architecture concepts (ILP, SIMD, etc.), memory hierarchy | | **17** | **[Optimization II - Code Optimization](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/17.Optimization_II.pdf)** | Arithmetic optimizations, memory optimizations, etc. | | **18** | **[Optimization III - Non-Coding Optimizations and Benchmarking](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/18.Optimization_III.pdf)** | Compiler optimizations, profiling and benchmarking tools | @@ -70,6 +70,7 @@ If you enjoy the course or you find it useful, please add a **Star** * **A Little History of C/C++ Programming Languages** * **Areas of Application and Popularity** * **C++ Philosophy** +* **C++ Weakness** * **Books and References** * **The Course** @@ -88,15 +89,15 @@ If you enjoy the course or you find it useful, please add a **Star** **[3. Basic Concepts II - Entities and Control Flow](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/03.Basic_Concepts_II.pdf)** * **Enumerators** -* **`struct`, Bitfield, `union` +* **`struct`, Bitfield, `union`** * **Control Flow**: `if` Statement, `for` Loop, Range-base `for` loop, `switch`, `goto` **[4. Basic Concepts III - Memory Management](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/04.Basic_Concepts_III.pdf)** -* **Heap and Stack**: Stack Memory, `new`, `delete`, Memory Leak +* **Heap and Stack**: Stack Memory, `new`, `delete`, Non-allocating placement allocation, Non-throwing allocation, Memory leak * **Initialization**: Variable initialization, Uniform initialization, Fixed-size array initialization, Structure initialization, Dynamic array initialization * **Pointers and References**: Pointer Operations, Address-of operator `&`, Reference -* **`const`, `constexpr`, `consteval`, `constinit`** +* **Constant and Literals, `const`, `constexpr`, `consteval`, `constinit`** * **Explicit Type Conversion**: `static_cast`, `const_cast`, `reinterpret_cast`, Type punning * `sizeof` Operator @@ -121,36 +122,40 @@ If you enjoy the course or you find it useful, please add a **Star** * **Polymorphism**: `virtual` methods, Virtual table, `override` keyword, `final` keyword, Common errors, Pure virtual method, Abstract class and interface * **Inheritance Casting and Run-time Type Identification** -* **Operator Overloading**: Overview, Subscript operator `[]`, Comparison operator `<`, Spaceship operator `<=>` Function call operator `()`, Conversion operator `T()`, Return type overloading resolution, Increment and decrement operators `++`/`--`, Assignment operator `=`, Stream operator `<<`, Operator Notes +* **Operator Overloading**: Overview, Subscript operator `[]`, Comparison operator `<`, Spaceship operator `<=>`, Function call operator `()`, Conversion operator `T()`, Return type overloading resolution, Increment and decrement operators `++`/`--`, Assignment operator `=`, Stream operator `<<`, Operator Notes * **C++ Special Objects**: Aggregate, Trivial class, Standard-layout class, Plain old data (POD), Hierarchy **[8. C++ Templates and Meta-programming I - Function Templates and Compile-Time Utilities](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/08.Templates_I.pdf)** -* **Function Template**: Overview, Template parameters, Template parameter - default value, Specialization, Overloading, `auto` deduction +* **Function Template**: Overview, Template parameters, Template parameter - default value, Specialization, Overloading +* **Template Variable** +* **Template Parameter Types**: Template Parameter Types, Generic Type Notes, + `auto` Placeholder, Class template parameter type, Array and pointer types, Function type * **Compile-Time Utilities**: `static_assert`, `decltype` Keyword, `using` Keyword -* **Type Traits**: Overview, Type traits library, Type manipulation, Type relation and transformation -* **Template Parameters**: Overview, Special cases +* **Type Traits**: Overview, Type traits library, Type manipulation **[9. C++ Templates and Meta-programming II -  - Class Templates and SFINAE](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/09.Templates_II.pdf)** -* **Class Template**: Class specialization, Class + Function - specialization, `friend` keyword, Dependent names, Template variable +* **Class Template**: Class specialization * **Class Template - Advanced Concepts**: Class + Function - Specialization, Dependent Names - `typename` and `template` Keywords, `friend` Keyword, Template Template Arguments * **Template Meta-Programming** * **SFINAE: Substitution Failure Is Not An Error**: Function SFINAE, Class SFINAE, Class + Function SFINAE -* **Variadic Template**: Folding Expression, Variadic Class Template -* **C++20 Concepts**: `concept` Keyword, `requires` Clause, `requires` Expression, `requires` Expression + Clause,` requires` Clause + Expression, `requires` and `constexpr`, Nested `requires` +* **Variadic Template**: Folding Expression, Variadic class template +* **C++20 Concepts**: Overview, `concept` Keyword, `requires` Clause, `requires` Expression, `requires` Expression + Clause, `requires` Clause + Expression, `requires` and `constexpr`, Nested `requires` **[10. Translation Units](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/10.Translation_Units.pdf)** * **Basic Concepts**: Translation unit, Local and global scope, Linkage -* **Storage Class and Duration**: Storage duration, Storage class, `static` and `extern` keywords, Internal/External linkage examples, Linkage of `const` and `constexpr`, Static Initialization Order Fiasco +* **Storage Class and Duration**: Storage duration, Storage class, `static` and `extern` keywords, Internal/External linkage examples +* **Linkage of `const` and `constexpr`**: Static Initialization Order Fiasco +* **Linkage Summary** * **Dealing with Multiple Translation Units**: Class in multiple translation units -* **One Definition Rule (ODR)**: Global variable issues,`inline` functions/variables -* **Function Template**: Cases, `extern` keyword -* **Class Template**: Cases, `extern` keyword -* **ODR and Undefined Behavior** +* **One Definition Rule (ODR)**: Global variable issues, ODR - Point 3, `inline` functions/variables, `constexpr` and `inline` +* **ODR - Function Template**: Cases, `extern` keyword +* **ODR - Class Template**: Cases, `extern` keyword +* **ODR Undefined Behavior and Summary** * **`#include` Issues**: Forward declaration, Include guard, Circular dependencies, Common linking errors -* **C++20 Modules**: Terminology, Visibility and Reachability, Module unit types, Keywords, Global module fragment, Private module gragment, Header module unit, Module partitions +* **C++20 Modules**: Overview, Terminology, Visibility and Reachability, Module unit types, Keywords, Global module fragment, Private module gragment, Header module unit, Module partitions * **Namespace**: Namespace functions vs. `static` methods, Namespace alias, Anonymous namespace, `inline` namespace, Attributes and namespace * **Compiling Multiple Translation Units**: Fundamental compiler flags, Compile Methods, Deal with libraries, Build static/dynamic libraries, Find dynamic library dependencies, Analyze object/executable symbols @@ -172,7 +177,9 @@ If you enjoy the course or you find it useful, please add a **Star** **[12. Ecosystem](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/12.Ecosystem.pdf)** -* **Debugging**: Assertion, Execution debugging (`gdb`) +* **Debugging** +* **Assertion** +* **Execution debugging** * **Memory Debugging**: `valgrind`, Stack protection * **Sanitizers**: Address sanitizer, Leak sanitizer, Memory sanitizers, Undefined behavior sanitizer * **Debugging Summary** @@ -182,7 +189,7 @@ If you enjoy the course or you find it useful, please add a **Star** * **CMake**: `cmake` and `ctest` * **Code Documentation**: `doxygen` * **Code Statistics**: Count lines of code, Cyclomatic complexity analyzer -* **Other Tools**: Code formatting - `clang-format`, `Compiler Explorer`, Code transformation - `CppInsights`, Code autocompletion - `TabNine/Kite`, Local code search - `ripgrep`, Code search engine - `searchcode/grep.app`, Code exploration - `SourceTrail`, Code benchmarking - `Quick-Bench`, Font for Coding +* **Other Tools**: Code formatting - `clang-format`, `Compiler Explorer`, Code transformation - `CppInsights`, Code autocompletion - `GitHub Co-Pilot/TabNine/Kite`, Local code search - `ripgrep`, Code search engine - `searchcode/grep.app`, Code benchmarking - `Quick-Bench`, Font for Coding **[13. Utilities](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/13.Utilities.pdf)** @@ -213,7 +220,7 @@ If you enjoy the course or you find it useful, please add a **Star** * **Value Categories** * **`&`, `&&` Overloading - Ref-qualifiers** * **Copy Elision and RVO** -* **Type Deduction**: Pass by-reference, Pass by-pointer, Pass by-value +* **Type Deduction**: Pass by-reference, Pass by-pointer, Pass by-value, `auto` deduction * **`const` Correctness** * **Undefined Behavior** * **Error Handling**: C++ Exceptions, Defining custom exceptions, `noexcept` keyword, Memory allocation issues, Alternative error handling approaches @@ -225,21 +232,21 @@ If you enjoy the course or you find it useful, please add a **Star** * **Overview** * **Basic Concepts**: Asymptotic complexity, Time-Memory Trade-off, Developing Cycle, Ahmdal's law, Throughput, Bandwidth, Latency, Performance bounds, Arithmetic intensity -* **Architecture Concepts**: Instruction-level parallelism, Little’s law, Data-level parallelism, Thread-level parallelism, RISC, CISC Instruction sets -* **Memory Hierarchy**: Memory hierarchy concepts, Memory locality, Internal structure alignment, External structure alignment +* **Basic Architecture Concepts**: Instruction-level parallelism, Little’s law, Data-level parallelism, Thread-level parallelism, RISC, CISC Instruction sets +* **Memory Hierarchy**: Memory hierarchy concepts, Memory locality **[17. Optimization II - Code Optmization](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/17.Optimization_II.pdf)** -* **I/O Operations**: `printf`, Memory Mapped I/O, Speed up raw data loading -* **Memory Optimizations** -* **Arithmetic**: Data types, Operations, Conversion, Floating-point, Compiler intrinsic functions, Value in a Range, Lookup Table -* **Control Flow**: Loop hoisting, Loop unrolling, Branch hints, Recursion -* **Functions**: Function call cost, Argument passing, Function optimizations, Function inlining, Pointers Aliasing +* **I/O Operations**: `printf`, Memory mapped I/O, Speed up raw data loading +* **Memory Optimizations**: Heap memory, Stack memory, Cache utilization, data alignment +* **Arithmetic**: Data types, Operations, Conversion, Floating-point, Compiler intrinsic functions, Value in a range, Lookup table +* **Control Flow**: Loop hoisting, Loop unrolling, Branch hints, Compiler hints, Recursion +* **Functions**: Function call cost, Argument passing, Function optimizations, Function inlining, Pointers aliasing * **C++ Objects**: Object RAII optimizations **[18. Optimization III - Non-Coding Optimizations and Benchmarking](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/18.Optimization_III.pdf)** -* **Compiler Optimizations**: About the compiler, Architecture flags, Optimization flags, Help the Compiler to produce better code, Profile guided optimization (PGO) +* **Compiler Optimizations**: About the compiler, Architecture flags, Optimization flags, Help the Compiler to produce better code, Profile guided optimization (PGO), Post-Processing Binary Optimizer * **Compiler Transformation Techniques** * **Libraries and Data Structures**: External libraries, Std library * **Performance Benchmarking**: What to test?, Workload/Dataset quality, Cache behavior, Stable CPU performance, Program memory layout, Measurement overhead and compiler Optimizations, Metric evaluation