mirror of
https://github.com/federico-busato/Modern-CPP-Programming.git
synced 2025-04-20 00:19:03 +03:00
November 2023
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
06.Basic_Concepts_V.pdf
Normal file
BIN
06.Basic_Concepts_V.pdf
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
92
README.md
92
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*
|
- *Free and frequently updated*
|
||||||
- Include the *last language standard* concepts and features
|
- 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
|
- *Minimal code examples* for showing just a specific feature or issue without digressing
|
||||||
- *Complementary language aspects*: tools, coding conventions, project organization, and code optimization
|
- *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
|
- *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 |
|
| | 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 |
|
| **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 |
|
| **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 - Entities and Control Flow](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/03.Basic_Concepts_II.pdf)** | Enumerators, structures, control flow statements |
|
| **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 - 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 |
|
| **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 - Functions and Preprocessing](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/05.Basic_Concepts_IV.pdf)** | Functions, lambda expressions, preprocessing directives |
|
| **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** | **[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 |
|
| **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 II - Polymorphism and Operator Overloading](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/07.Object_Oriented_II.pdf)** | Polymorphism, operators overloading |
|
| **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** | **[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 |
|
| **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 II - Class Templates and SFINAE](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/09.Templates_II.pdf)** | Class template, SFINAE |
|
| **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** | **[Translation Units I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/10.Translation_Units_I.pdf)** | Linkage and One Definition Rule |
|
| **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 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 |
|
| **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** | **[Code Conventions](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/12.Code_Convention.pdf)** | Project organization and main code conventions |
|
| **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** | **[Ecosystem I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/13.Ecosystem_I.pdf)** | Debugging, and testing |
|
| **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 II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/14.Ecosystem_II.pdf)** | Cmake, documenting, and other Tools |
|
| **14** | **[Ecosystem I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/14.Ecosystem_I.pdf)** | Debugging, and testing |
|
||||||
| **15** | **[Utilities](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/15.Utilities.pdf)** | Main `std` libraries |
|
| **15** | **[Ecosystem II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/15.Ecosystem_II.pdf)** | Cmake, documenting, and other Tools |
|
||||||
| **16** | **[Containers, Iterators, and Algorithms](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/16.Iterators_Containers_Alg.pdf)** | Containers, iterators, algorithms, ranges |
|
| **16** | **[Utilities](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/16.Utilities.pdf)** | Main `std` libraries |
|
||||||
| **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 |
|
| **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 II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/18.Advanced_Topics_II.pdf)** | Error handling, C++ idioms, smart pointers |
|
| **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** | **[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 |
|
| **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 II - Code Optimization](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/20.Optimization_II.pdf)** | Arithmetic optimizations, memory optimizations, etc. |
|
| **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 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 |
|
| **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
|
## TOPICS IN DETAILS
|
||||||
|
|
||||||
@ -85,17 +86,20 @@ If you enjoy the course or you find it useful, please add a **Star**
|
|||||||
* **Conversion Rules**
|
* **Conversion Rules**
|
||||||
* **`auto` declaration**
|
* **`auto` declaration**
|
||||||
* **C++ Operators**: Operators precedence, Prefix/Postfix increment/decrement, Assignment, Compound , and Comma operators, Spaceship operator `<=>` , Safe Comparison Operators
|
* **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
|
* **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 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
|
* **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**
|
* **Enumerators**
|
||||||
* **`struct`, Bitfield, `union`**
|
* **`struct`, Bitfield, `union`**
|
||||||
* **Control Flow**: `if` Statement, `for` Loop, Range-base `for` loop, `switch`, `goto`
|
* **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
|
* **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
|
* **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
|
* **Explicit Type Conversion**: `static_cast`, `const_cast`, `reinterpret_cast`, Type punning
|
||||||
* `sizeof` Operator
|
* `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**
|
* **Declaration and Definition**
|
||||||
* **Functions**: Pass by-value, Pass by-pointer, Pass by-reference, Function signature and Overloading, Overloading and `=delete`, Default parameters, Attributes
|
* **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
|
* **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
|
* **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
|
* **C++ Classes**: RAII Idiom
|
||||||
* **Class Hierarchy**: Access specifiers, Inheritance access specifiers
|
* **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`)
|
* **Defaulted Constructors, Destructor, and Operators** (`= default`)
|
||||||
* **Class Keywords**: `this`, `static`, `const`, `mutable`, `using`, `friend`, `delete`
|
* **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
|
* **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**
|
* **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
|
* **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
|
* **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
|
* **Function Template**: Overview, Template parameters, Template parameter - default value, Specialization, Overloading
|
||||||
* **Template Variable**
|
* **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
|
* **Compile-Time Utilities**: `static_assert`, `decltype` Keyword, `using` Keyword
|
||||||
* **Type Traits**: Overview, Type traits library, Type manipulation
|
* **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**: 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
|
* **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
|
* **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`
|
* **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
|
* **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
|
* **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 - Class Template**: Cases, `extern` keyword
|
||||||
* **ODR Undefined Behavior and Summary**
|
* **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
|
- **`#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
|
- **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
|
- **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
|
* **C++ Project Organization**: Project directories, Project files, “Common” Project Organization Notes, Alternative - “Canonical” project organization
|
||||||
* **Coding Styles and Conventions**
|
* **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**
|
* **Modern C++ Features**
|
||||||
* **Maintainability**
|
* **Maintainability**
|
||||||
* **Naming**
|
* **Naming**
|
||||||
* **Reabability and Formatting**
|
* **Readability and Formatting**
|
||||||
* **Code Documentation**
|
* **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**
|
* **Debugging**
|
||||||
* **Assertion**
|
* **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 Testing**: Unit test, Code coverage, Fuzz testing
|
||||||
* **Code Quality**: `clang-tidy`
|
* **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`
|
- **CMake**: `cmake` and `ctest`
|
||||||
- **Code Documentation**: `doxygen`
|
- **Code Documentation**: `doxygen`
|
||||||
- **Code Statistics**: Count lines of code, Cyclomatic complexity analyzer
|
- **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
|
- **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`
|
* **I/O Stream**: Manipulator, `ofstream/ifstream`
|
||||||
* **Math Libraries**
|
* **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++ `<random>`, Seed, PRNG period and quality, Distribution, Quasi-random
|
* **Random Number**: Basic Concepts, C++ `<random>`, Seed, PRNG period and quality, Distribution, Quasi-random
|
||||||
* **Time Measuring**: Wall-Clock time, User time, System time
|
* **Time Measuring**: Wall-Clock time, User time, System time
|
||||||
* **Std Template Classes**: `std::byte` `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
|
* **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**
|
* **Containers and Iterators**
|
||||||
* **Sequence Containers**: `std::array`, `std::vector`, `std::list`, `std::deque`, `std::forward_list`
|
* **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`
|
* **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
|
* **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`
|
* **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
|
* **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
|
* **Type Deduction**: Pass by-reference, Pass by-pointer, Pass by-value, `auto` deduction
|
||||||
* **`const` Correctness**
|
* **`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**
|
- **Undefined Behavior**
|
||||||
- **Error Handling**: C++ Exceptions, Defining custom exceptions, `noexcept` keyword, Memory allocation issues, Alternative error handling approaches
|
- **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`
|
- **Smart pointers**: `std::unique_ptr`, `std::shared_ptr`, `std::weak_ptr`
|
||||||
- **Concurrency**: Thread Methods, Mutex, Atomic, Task-based parallelism
|
- **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
|
* **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 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
|
* **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
|
* **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
|
* **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
|
* **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
|
* **C++ Objects**: Object RAII optimizations
|
||||||
* **Std Library and Other Language Aspects**
|
* **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 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**
|
* **Compiler Transformation Techniques**
|
||||||
@ -295,4 +299,4 @@ If you find any typo, conceptual error, or section to improve, please report the
|
|||||||
`Federico Busato`
|
`Federico Busato`
|
||||||
|
|
||||||
- Twitter: [twitter.com/fedebusato](https://twitter.com/fedebusato)
|
- 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/)
|
||||||
|
Reference in New Issue
Block a user