diff --git a/01.Introduction.pdf b/01.Introduction.pdf index 8a2224b..887cc1f 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 6996ce9..0172f94 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 9dca29b..97766be 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 6926cc7..f3133ca 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 ec153a3..9a99fa8 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 16393bd..3ed8daf 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 6420f76..15856b8 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 ee25a4f..9699ca1 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 5e29c4c..9be5d60 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 08bd1fe..f6ddd34 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 6c58547..99f9a03 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 8ed5616..d978f2b 100644 Binary files a/12.Ecosystem.pdf and b/12.Ecosystem.pdf differ diff --git a/13.Utilities.pdf b/13.Utilities.pdf index 7ee75fa..128fa2f 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 9fe2a59..485e2e1 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 5691c4b..54010ea 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 3001c98..6cd4a20 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 13d460c..f0358ec 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 ed5ef07..55e174b 100644 Binary files a/18.Optimization_III.pdf and b/18.Optimization_III.pdf differ diff --git a/README.md b/README.md index cb70010..1c3b6da 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,29 @@ # Modern C++ Programming +

+

+

+ + + +

+

+ + + +

-## C++11 / C++14 / C++17 / (C++20) +

+ + + + + + +

+ +## C++11 / C++14 / C++17 / C++20 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. @@ -59,7 +80,7 @@ If you enjoy the course or you find it useful, please add a **Star** * **C++ Fundamental Types Overview**: Arithmetic types, Non-standard arithmetic types, `void` type, Pointer type and `nullptr` * **Conversion Rules** * **`auto` declaration** -* **C++ Operators**: Operators precedence, Prefix/Postfix increment/decrement, Assignment, Compound , and comma operators, Spaceship operator `<=>` +* **C++ Operators**: Operators precedence, Prefix/Postfix increment/decrement, Assignment, Compound , and comma operators, Spaceship operator `<=>` , Safe Comparison Operators * **Integral Data Types**: Fixed width integers and `size_t`, When use signed/unsigned integer? Promotion, Truncation, Undefined behavior * **Floating-point Types and Arithmetic**: Normal/Denormal values, Infinity, Not a Number (`NaN`), Summary, Properties * **Floating-point Issues**: Catastrophic cancellation, Floating-point comparison @@ -113,9 +134,11 @@ If you enjoy the course or you find it useful, please add a **Star** **[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 - 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` **[10. Translation Units](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/10.Translation_Units.pdf)** @@ -127,8 +150,9 @@ If you enjoy the course or you find it useful, please add a **Star** * **Class Template**: Cases, `extern` keyword * **ODR and Undefined Behavior** * **`#include` Issues**: Forward declaration, Include guard, Circular dependencies, Common linking errors -* **Namespace**: Namespace functions vs. `static` methods, Namespace alias, Anonymous namespace, `inline` namespace -* **How to Compile**: Compile strategies, Deal with libraries, Build static/dynamic libraries, Find dynamic library dependencies, Analyze object/executable symbols +* **C++20 Modules**: 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 **[11. Code Conventions](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/11.Code_Convention.pdf)** @@ -164,10 +188,10 @@ If you enjoy the course or you find it useful, please add a **Star** * **I/O Stream**: Manipulator, `ofstream/ifstream` * **Math Libraries** -* **Strings**: `std::string`, Conversion from/to numeric balues, `std::string view`, `std::format` +* **Strings**: `std::string`, Conversion from/to numeric balues, `std::string_view`, `std::format` * **Random Number**: Basic Concepts, C++ ``, Seed, PRNG period and quality, Distribution, Quasi-random * **Time Measuring**: Wall-Clock time, User time, System time -* **Std Template Classes**: `std::pair`, `std::tuple`, `std::variant`, `std::optional`, `std::any` +* **Std Template Classes**: `std::byte` `std::pair`, `std::tuple`, `std::variant`, `std::optional`, `std::any` * **Filesystem Library**: Query methods, Modify methods **[14. Containers, Iterators, and Algorithms](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/14.Iterators_Containers_Alg.pdf)** @@ -178,8 +202,9 @@ If you enjoy the course or you find it useful, please add a **Star** * **Container Adaptors**: `std::stack`, `std::queue`, `std::priority_queue` * **View**: `std::span` * **Implement a Custom Iterator**: Semantic, Implement a simple Iterator -* **Iterator Utility Methods**: `std::advance`, `std::next`, `std::prev`, `std::distance`, Range access methods, Iterator traits +* **Iterator Utility Methods**: `std::advance`, `std::next`, `std::prev`, `std::distance`, Container access methods, Iterator traits * **Algorithms Library**: `std::find_if`, `std::sort`, `std::accumulate`, `std::generate`, `std::remove_if` +* **C++20 Ranges**: Key concepts, Range view, Range adaptor, Range factory, Range algorithms, Range actions **[15. Advanced Topics](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/15.Advanced_Topics.pdf)** @@ -217,15 +242,14 @@ If you enjoy the course or you find it useful, please add a **Star** * **Compiler Optimizations**: About the compiler, Architecture flags, Optimization flags, Help the Compiler to produce better code, Profile guided optimization (PGO) * **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 * **Profiling**: `gprof`, `uftrace`, `callgrind`, `cachegrind`, `perf` Linux profiler -* **Performance Benchmarking**: What to test?, Workload/Dataset quality, Cache behavior, Stable CPU performance, Program memory layout * **Parallel Computing**: Concurrency vs. Parallelism, Performance scaling, Gustafson’s Law, Parallel programming languages ### Roadmap -1. Complete C++20 topics -2. Software Design Chapter -3. Build Aspects Chapter (e.g. reducing build time) +1. Software Design Chapter +2. Build Aspects Chapter (e.g. reducing build time) ### Essential Tool @@ -235,7 +259,13 @@ Online compiler and execution: [CompilerExplorer](https://godbolt.org/) ### Reporting bugs and contributing -If you find any typos, conceptual errors, or sections to improve, please report them by writing directly to me or by using the `issue` panel +If you find any typo, conceptual error, or section to improve, please report them by writing directly to me or by using the `issue` panel + +

+ + + +

## Author