diff --git a/01.Introduction.pdf b/01.Introduction.pdf index 51d768a..d6ede3d 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 35c714f..463e21a 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 a28a8fe..cef2d6b 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 e869229..ca05df8 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 9eceb79..d8957bc 100644 Binary files a/05.Basic_Concepts_IV.pdf and b/05.Basic_Concepts_IV.pdf differ diff --git a/06.Basic_Concepts_V.pdf b/06.Basic_Concepts_V.pdf new file mode 100644 index 0000000..a5a97ed Binary files /dev/null and b/06.Basic_Concepts_V.pdf differ diff --git a/06.Object_Oriented_I.pdf b/07.Object_Oriented_I.pdf similarity index 94% rename from 06.Object_Oriented_I.pdf rename to 07.Object_Oriented_I.pdf index 469c9af..2072751 100644 Binary files a/06.Object_Oriented_I.pdf and b/07.Object_Oriented_I.pdf differ diff --git a/07.Object_Oriented_II.pdf b/08.Object_Oriented_II.pdf similarity index 98% rename from 07.Object_Oriented_II.pdf rename to 08.Object_Oriented_II.pdf index 08072f5..b234c94 100644 Binary files a/07.Object_Oriented_II.pdf and b/08.Object_Oriented_II.pdf differ diff --git a/08.Templates_I.pdf b/09.Templates_I.pdf similarity index 73% rename from 08.Templates_I.pdf rename to 09.Templates_I.pdf index 2774487..3839eb1 100644 Binary files a/08.Templates_I.pdf and b/09.Templates_I.pdf differ diff --git a/09.Templates_II.pdf b/10.Templates_II.pdf similarity index 83% rename from 09.Templates_II.pdf rename to 10.Templates_II.pdf index 216e862..1eb3b9e 100644 Binary files a/09.Templates_II.pdf and b/10.Templates_II.pdf differ diff --git a/10.Translation_Units_I.pdf b/11.Translation_Units_I.pdf similarity index 92% rename from 10.Translation_Units_I.pdf rename to 11.Translation_Units_I.pdf index d36e8f6..8a7da96 100644 Binary files a/10.Translation_Units_I.pdf and b/11.Translation_Units_I.pdf differ diff --git a/11.Translation_Units_II.pdf b/12.Translation_Units_II.pdf similarity index 91% rename from 11.Translation_Units_II.pdf rename to 12.Translation_Units_II.pdf index f89acbe..4c11dbb 100644 Binary files a/11.Translation_Units_II.pdf and b/12.Translation_Units_II.pdf differ diff --git a/12.Code_Convention.pdf b/13.Code_Convention.pdf similarity index 89% rename from 12.Code_Convention.pdf rename to 13.Code_Convention.pdf index 687a38b..5f95ad2 100644 Binary files a/12.Code_Convention.pdf and b/13.Code_Convention.pdf differ diff --git a/13.Ecosystem_I.pdf b/14.Ecosystem_I.pdf similarity index 96% rename from 13.Ecosystem_I.pdf rename to 14.Ecosystem_I.pdf index 81772f3..613846a 100644 Binary files a/13.Ecosystem_I.pdf and b/14.Ecosystem_I.pdf differ diff --git a/14.Ecosystem II.pdf b/15.Ecosystem II.pdf similarity index 95% rename from 14.Ecosystem II.pdf rename to 15.Ecosystem II.pdf index ff92f87..ddeef3b 100644 Binary files a/14.Ecosystem II.pdf and b/15.Ecosystem II.pdf differ diff --git a/15.Utilities.pdf b/16.Utilities.pdf similarity index 87% rename from 15.Utilities.pdf rename to 16.Utilities.pdf index ac2776c..3763a33 100644 Binary files a/15.Utilities.pdf and b/16.Utilities.pdf differ diff --git a/16.Iterators_Containers_Alg.pdf b/17.Iterators_Containers_Alg.pdf similarity index 91% rename from 16.Iterators_Containers_Alg.pdf rename to 17.Iterators_Containers_Alg.pdf index 2fd0e46..61851ca 100644 Binary files a/16.Iterators_Containers_Alg.pdf and b/17.Iterators_Containers_Alg.pdf differ diff --git a/17.Advanced_Topics_I.pdf b/18.Advanced_Topics_I.pdf similarity index 96% rename from 17.Advanced_Topics_I.pdf rename to 18.Advanced_Topics_I.pdf index 2bdb24d..8ffdfd2 100644 Binary files a/17.Advanced_Topics_I.pdf and b/18.Advanced_Topics_I.pdf differ diff --git a/18.Advanced_Topics_II.pdf b/19.Advanced_Topics_II.pdf similarity index 90% rename from 18.Advanced_Topics_II.pdf rename to 19.Advanced_Topics_II.pdf index dc852fd..0b69200 100644 Binary files a/18.Advanced_Topics_II.pdf and b/19.Advanced_Topics_II.pdf differ diff --git a/19.Optimization_I.pdf b/20.Optimization_I.pdf similarity index 98% rename from 19.Optimization_I.pdf rename to 20.Optimization_I.pdf index e200102..3e791d4 100644 Binary files a/19.Optimization_I.pdf and b/20.Optimization_I.pdf differ diff --git a/20.Optimization_II.pdf b/21.Optimization_II.pdf similarity index 90% rename from 20.Optimization_II.pdf rename to 21.Optimization_II.pdf index 108eac2..863fa6c 100644 Binary files a/20.Optimization_II.pdf and b/21.Optimization_II.pdf differ diff --git a/21.Optimization_III.pdf b/22.Optimization_III.pdf similarity index 98% rename from 21.Optimization_III.pdf rename to 22.Optimization_III.pdf index 4215ac5..f125602 100644 Binary files a/21.Optimization_III.pdf and b/22.Optimization_III.pdf differ diff --git a/README.md b/README.md index 612bcb8..a102d7f 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ This *open-access* course is directed at those who are already familiar with C a - *Free and frequently updated* - Include the *last language standard* concepts and features -- *Practical teaching*: small structured descriptions associated to code +- *Practical teaching*: small structured descriptions associated with code - *Minimal code examples* for showing just a specific feature or issue without digressing - *Complementary language aspects*: tools, coding conventions, project organization, and code optimization - *Experience-based*: many aspects, examples, and problems come from real-world cases faced during my work as software engineer @@ -45,26 +45,27 @@ If you enjoy the course or you find it useful, please add a **Star** | | TITLE | MAIN FOCUS | | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | | **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 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** | **[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** | **[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** | **[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** | **[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 I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/10.Translation_Units_I.pdf)** | Linkage and One Definition Rule | -| **11** | **[Translation Units II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/11.Translation_Units_II.pdf)** | Dealing with multiple translation units and files,  `#include`, and modules | -| **12** | **[Code Conventions](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/12.Code_Convention.pdf)** | Project organization and main code conventions | -| **13** | **[Ecosystem I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/13.Ecosystem_I.pdf)** | Debugging, and testing | -| **14** | **[Ecosystem II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/14.Ecosystem_II.pdf)** | Cmake, documenting, and other Tools | -| **15** | **[Utilities](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/15.Utilities.pdf)** | Main `std` libraries | -| **16** | **[Containers, Iterators, and Algorithms](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/16.Iterators_Containers_Alg.pdf)** | Containers, iterators, algorithms, ranges | -| **17** | **[Advanced Topics I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/17.Advanced_Topics_I.pdf)** | Move semantics, universal reference, type deduction | -| **18** | **[Advanced Topics II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/18.Advanced_Topics_II.pdf)** | Error handling, C++ idioms, smart pointers | -| **19** | **[Optimization I - Basic Concepts](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/19.Optimization_I.pdf)** | Ahmdal Law, performance bounds, architecture concepts (ILP, SIMD, etc.), memory hierarchy | -| **20** | **[Optimization II - Code Optimization](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/20.Optimization_II.pdf)** | Arithmetic optimizations, memory optimizations, etc. | -| **21** | **[Optimization III - Non-Coding Optimizations and Benchmarking](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/21.Optimization_III.pdf)** | Compiler optimizations, profiling and benchmarking tools | +| **2** | **[Basic Concepts I - Fundamental Types](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/02.Basic_Concepts_I.pdf)** | Types overview, operators, and conversion | +| **3** | **[Basic Concepts II - Integral and Floating-point Types](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/03.Basic_Concepts_II.pdf)** | Integral and floating-point types and their arithmetic | +| **4** | **[Basic Concepts III - Entities and Control Flow](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/04.Basic_Concepts_III.pdf)** | Enumerators, structures, control flow statements | +| **5** | **[Basic Concepts IV - Memory Management](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/05.Basic_Concepts_IV.pdf)** | Heap, Stack, pointers, references, const properties, conversion operators | +| **6** | **[Basic Concepts V - Functions and Preprocessing](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/06.Basic_Concepts_V.pdf)** | Functions, lambda expressions, preprocessing directives | +| **7** | **[Object Oriented Programming I - Class Concepts](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/07.Object_Oriented_I.pdf)** | Class hierarchy, constructor, destructor, class keywords | +| **8** | **[Object Oriented Programming II - Polymorphism and Operator Overloading](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/08.Object_Oriented_II.pdf)** | Polymorphism, operators overloading | +| **9** | **[Templates and Meta-programming I - Function Templates and Compile-Time Utilities](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/09.Templates_I.pdf)** | Function template, type traits | +| **10** | **[Templates and Meta-programming II - Class Templates and SFINAE](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/10.Templates_II.pdf)** | Class template, SFINAE | +| **11** | **[Translation Units I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/11.Translation_Units_I.pdf)** | Linkage and One Definition Rule | +| **12** | **[Translation Units II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/12.Translation_Units_II.pdf)** | Dealing with multiple translation units and files,  `#include`, and modules | +| **13** | **[Code Conventions](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/13.Code_Convention.pdf)** | Project organization and main code conventions | +| **14** | **[Ecosystem I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/14.Ecosystem_I.pdf)** | Debugging, and testing | +| **15** | **[Ecosystem II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/15.Ecosystem_II.pdf)** | Cmake, documenting, and other Tools | +| **16** | **[Utilities](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/16.Utilities.pdf)** | Main `std` libraries | +| **17** | **[Containers, Iterators, and Algorithms](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/17.Iterators_Containers_Alg.pdf)** | Containers, iterators, algorithms, ranges | +| **18** | **[Advanced Topics I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/18.Advanced_Topics_I.pdf)** | Move semantics, universal reference, type deduction | +| **19** | **[Advanced Topics II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/19.Advanced_Topics_II.pdf)** | Error handling, C++ idioms, smart pointers | +| **20** | **[Optimization I - Basic Concepts](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/20.Optimization_I.pdf)** | Ahmdal Law, performance bounds, architecture concepts (ILP, SIMD, etc.), memory hierarchy | +| **21** | **[Optimization II - Code Optimization](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/21.Optimization_II.pdf)** | Arithmetic optimizations, memory optimizations, etc. | +| **22** | **[Optimization III - Non-Coding Optimizations and Benchmarking](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/22.Optimization_III.pdf)** | Compiler optimizations, profiling and benchmarking tools | ## TOPICS IN DETAILS @@ -85,17 +86,20 @@ If you enjoy the course or you find it useful, please add a **Star** * **Conversion Rules** * **`auto` declaration** * **C++ Operators**: Operators precedence, Prefix/Postfix increment/decrement, Assignment, Compound , and Comma operators, Spaceship operator `<=>` , Safe Comparison Operators + +**[3. Basic Concepts II - Integral and Floating-point Types](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/03.Basic_Concepts_II.pdf)** + * **Integral Data Types**: Fixed width integers, `size_t` and`ptrdiff_t`, When use signed/unsigned integer? Promotion, Truncation, Undefined behavior * **Floating-point Types and Arithmetic**: IEEE Floating-point Standard and Other Representations, Normal/Denormal values, Infinity, Not a Number (`NaN`), Machine Epsilon, Units at the Last Place (ULP), Cheatsheet, Summary, Arithmetic Properties, Detect Floating-point Errors * **Floating-point Issues**: Catastrophic cancellation, Floating-point comparison -**[3. Basic Concepts II - Entities and Control Flow](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/03.Basic_Concepts_II.pdf)** +**[4. Basic Concepts III - Entities and Control Flow](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/04.Basic_Concepts_III.pdf)** * **Enumerators** * **`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)** +**[5. Basic Concepts IV - Memory Management](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/05.Basic_Concepts_IV.pdf)** * **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 memory initialization @@ -105,7 +109,7 @@ If you enjoy the course or you find it useful, please add a **Star** * **Explicit Type Conversion**: `static_cast`, `const_cast`, `reinterpret_cast`, Type punning * `sizeof` Operator -**[5. Basic Concepts IV - Functions and Preprocessing](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/05.Basic_Concepts_IV.pdf)** +**[6. Basic Concepts V - Functions and Preprocessing](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/06.Basic_Concepts_V.pdf)** * **Declaration and Definition** * **Functions**: Pass by-value, Pass by-pointer, Pass by-reference, Function signature and Overloading, Overloading and `=delete`, Default parameters, Attributes @@ -113,7 +117,7 @@ If you enjoy the course or you find it useful, please add a **Star** * **Lambda Expressions**: Capture list, Other features, Capture list and classes * **Preprocessing**: Preprocessors, Common errors, Useful macro, Stringizing operator (`#`), `#error` and `warning`, `#pragma`, Token-Pasting Operator (`##`), Variadic Macro -**[6. Object-Oriented Programming I - Class Concepts](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/06.Object_Oriented_I.pdf)** +**[7. Object-Oriented Programming I - Class Concepts](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/07.Object_Oriented_I.pdf)** * **C++ Classes**: RAII Idiom * **Class Hierarchy**: Access specifiers, Inheritance access specifiers @@ -123,14 +127,14 @@ If you enjoy the course or you find it useful, please add a **Star** * **Defaulted Constructors, Destructor, and Operators** (`= default`) * **Class Keywords**: `this`, `static`, `const`, `mutable`, `using`, `friend`, `delete` -**[7. Object-Oriented Programming II - Polymorphism and Operator Overloading](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/07.Object_Oriented_II.pdf)** +**[8. Object-Oriented Programming II - Polymorphism and Operator Overloading](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/08.Object_Oriented_II.pdf)** * **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, Comparison operator `<`, Spaceship operator `<=>`, Subscript operator `[]`, Multidimensional Subscript operator `[]`, Function call operator `()`, static operator `[]` and 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. 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)** +**[9. Templates and Meta-programming I - Function Templates and Compile-Time Utilities](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/09.Templates_I.pdf)** * **Function Template**: Overview, Template parameters, Template parameter - default value, Specialization, Overloading * **Template Variable** @@ -138,7 +142,7 @@ If you enjoy the course or you find it useful, please add a **Star** * **Compile-Time Utilities**: `static_assert`, `decltype` Keyword, `using` Keyword * **Type Traits**: Overview, Type traits library, Type manipulation -**[9. Templates and Meta-programming II -  - Class Templates and SFINAE](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/09.Templates_II.pdf)** +**[10. Templates and Meta-programming II -  - Class Templates and SFINAE](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/10.Templates_II.pdf)** * **Class Template**: Class specialization, Template class constructor * **Class Template - Advanced Concepts**: Class + Function - Specialization, Dependent Names - `typename` and `template` Keywords, Class template hierarchy and `using`, `friend` Keyword, Template Template Arguments @@ -147,7 +151,7 @@ If you enjoy the course or you find it useful, please add a **Star** * **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 I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/10.Translation_Units_I.pdf)** +**[11. Translation Units I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/11.Translation_Units_I.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 @@ -159,14 +163,14 @@ If you enjoy the course or you find it useful, please add a **Star** * **ODR - Class Template**: Cases, `extern` keyword * **ODR Undefined Behavior and Summary** -**[11. Translation Units II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/11.Translation_Units_II.pdf)** +**[12. Translation Units II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/12.Translation_Units_II.pdf)** - **`#include` Issues**: Forward declaration, Include guard, Circular dependencies, Common linking errors -- **C++20 Modules**: Overview, 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 fragment, 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 -**[12. Code Conventions](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/12.Code_Convention.pdf)** +**[13. Code Conventions](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/13.Code_Convention.pdf)** * **C++ Project Organization**: Project directories, Project files, “Common” Project Organization Notes, Alternative - “Canonical” project organization * **Coding Styles and Conventions** @@ -180,10 +184,10 @@ If you enjoy the course or you find it useful, please add a **Star** * **Modern C++ Features** * **Maintainability** * **Naming** -* **Reabability and Formatting** +* **Readability and Formatting** * **Code Documentation** -**[13. Ecosystem I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/13.Ecosystem_I.pdf)** +**[14. Ecosystem I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/14.Ecosystem_I.pdf)** * **Debugging** * **Assertion** @@ -196,24 +200,24 @@ If you enjoy the course or you find it useful, please add a **Star** * **Code Testing**: Unit test, Code coverage, Fuzz testing * **Code Quality**: `clang-tidy` -**[14. Ecosystem II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/14.Ecosystem_II.pdf)** +**[15. Ecosystem II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/15.Ecosystem_II.pdf)** - **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 - `GitHub Co-Pilot/TabNine/Kite`, Local code search - `ripgrep`, Code search engine - `searchcode/grep.app`, Code benchmarking - `Quick-Bench`, Font for Coding -**[15. Utilities](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/15.Utilities.pdf)** +**[16. Utilities](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/16.Utilities.pdf)** * **I/O Stream**: Manipulator, `ofstream/ifstream` * **Math Libraries** -* **Strings**: `std::string`, Conversion from/to numeric balues, `std::string_view`, `std::format`, `std::print` +* **Strings**: `std::string`, Conversion from/to numeric values, `std::string_view`, `std::format`, `std::print` * **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::byte` `std::pair`, `std::tuple`, `std::variant`, `std::optional`, `std::any` * **Filesystem Library**: Query methods, Modify methods -**[16. Containers, Iterators, and Algorithms](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/16.Iterators_Containers_Alg.pdf)** +**[17. Containers, Iterators, and Algorithms](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/17.Iterators_Containers_Alg.pdf)** * **Containers and Iterators** * **Sequence Containers**: `std::array`, `std::vector`, `std::list`, `std::deque`, `std::forward_list` @@ -225,7 +229,7 @@ If you enjoy the course or you find it useful, please add a **Star** * **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 -**[17. Advanced Topics I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/17.Advanced_Topics_I.pdf)** +**[18. Advanced Topics I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/18.Advanced_Topics_I.pdf)** * **Move Semantic**: `lvalues` and `rvalues` references, Move semantic, Compiler implicitly declared, `std::move` * **Universal Reference and Perfect Forwarding**: Universal reference, Reference collapsing rules, Perfect forwarding @@ -235,7 +239,7 @@ If you enjoy the course or you find it useful, please add a **Star** * **Type Deduction**: Pass by-reference, Pass by-pointer, Pass by-value, `auto` deduction * **`const` Correctness** -**[18. Advanced Topics II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/18.Advanced_Topics_II.pdf)** +**[19. Advanced Topics II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/19.Advanced_Topics_II.pdf)** - **Undefined Behavior** - **Error Handling**: C++ Exceptions, Defining custom exceptions, `noexcept` keyword, Memory allocation issues, Alternative error handling approaches @@ -243,14 +247,14 @@ If you enjoy the course or you find it useful, please add a **Star** - **Smart pointers**: `std::unique_ptr`, `std::shared_ptr`, `std::weak_ptr` - **Concurrency**: Thread Methods, Mutex, Atomic, Task-based parallelism -**[19. Optimization I - Basic Concepts](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/19.Optimization_I.pdf)** +**[20. Optimization I - Basic Concepts](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/20.Optimization_I.pdf)** * **Introduction**: Moore’s Law, Moore’s Law limitations, Reasons for Optimizing * **Basic Concepts**: Asymptotic complexity, Time-Memory Trade-off, Developing Cycle, Ahmdal's law, Throughput, Bandwidth, Latency, Performance bounds, Arithmetic intensity * **Basic Architecture Concepts**: Instruction-level parallelism (ILP), Little’s law, Data-level parallelism (SIMD), Thread-level parallelism (TLP), Single Instruction Multiple Threads (SIMT), RISC, CISC Instruction sets * **Memory Hierarchy**: Memory hierarchy concepts, Memory locality -**[20. Optimization II - Code Optmization](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/20.Optimization_II.pdf)** +**[21. Optimization II - Code Optimization](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/21.Optimization_II.pdf)** * **I/O Operations**: `printf`, Memory mapped I/O, Speed up raw data loading * **Memory Optimizations**: Heap memory, Stack memory, Cache utilization, data alignment, Memory Prefetch @@ -260,7 +264,7 @@ If you enjoy the course or you find it useful, please add a **Star** * **C++ Objects**: Object RAII optimizations * **Std Library and Other Language Aspects** -**[21. Optimization III - Non-Coding Optimizations and Benchmarking](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/21.Optimization_III.pdf)** +**[22. Optimization III - Non-Coding Optimizations and Benchmarking](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/22.Optimization_III.pdf)** * **Compiler Optimizations**: About the compiler, Compiler optimization flags, Linker optimization flags, Architecture flags, Help the Compiler to produce better code, Profile guided optimization (PGO), Post-Processing Binary Optimizer * **Compiler Transformation Techniques** @@ -295,4 +299,4 @@ If you find any typo, conceptual error, or section to improve, please report the `Federico Busato` - Twitter: [twitter.com/fedebusato](https://twitter.com/fedebusato) -- Linkedin: [www.linkedin.com/in/federico-busato/](https://www.linkedin.com/in/federico-busato/) +- LinkedIn: [www.linkedin.com/in/federico-busato/](https://www.linkedin.com/in/federico-busato/)