diff --git a/02.Basic_Concepts_I.pdf b/02.Basic_Concepts_I.pdf index 18d871b..1cdde8c 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 bfeda32..875ebfa 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 3b0cd6f..5ca2393 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 fc17f22..75987b2 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 221a044..91826b8 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 97209ec..6a218b3 100644 Binary files a/07.Object_Oriented_II.pdf and b/07.Object_Oriented_II.pdf differ diff --git a/10.Translation_Units.pdf b/10.Translation_Units.pdf index 331a0ee..a0b2c2f 100644 Binary files a/10.Translation_Units.pdf and b/10.Translation_Units.pdf differ diff --git a/12.Ecosystem.pdf b/12.Ecosystem.pdf index 244adad..07f6b1c 100644 Binary files a/12.Ecosystem.pdf and b/12.Ecosystem.pdf differ diff --git a/15.Advanced_Topics.pdf b/15.Advanced_Topics.pdf index cc35fe7..d437b6e 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 846b35c..181ce55 100644 Binary files a/16.Optimization_I.pdf and b/16.Optimization_I.pdf differ diff --git a/README.md b/README.md index 26610ea..4cb0040 100644 --- a/README.md +++ b/README.md @@ -15,11 +15,11 @@ * **Preparation**: What compiler should I use?, What editor/IDE compiler should I use?, How to compile? * **Hello World**: I/O Stream -* **C++ Fundamental Types Overview**: Arithmetic Types, Other Arithmetic Types, Pointer Type +* **C++ Fundamental Types Overview**: Arithmetic types, Non-standard arithmetic types, `void` type, Pointer type and `nullptr` * **Conversion Rules** -* **Math Operators** -* **Integral Data Types**: Fixed Width Integers, When Use Signed/Unsigned Integer?, Promotion, Truncation, Undefined Behavior -* **Floating-point Types and Arithmetic**: Normal/Denormal Values, Summary, Not a Number (`NaN`), Infinity, Properties +* **C++ Operators**: Operators precedence, Prefix/Postfix increment/decrement, Assignment and comma operators, Spaceship operator `<=>` +* **Integral Data Types**: Fixed width integers, When use signed/unsigned integer? Promotion, Truncation, Undefined Behavior +* **Floating-point Types and Arithmetic**: Normal/Denormal values, Not a Number (`NaN`), Infinity, Properties * **Floating-point Issues**: Floating-point Comparison, Catastrophic Cancellation **[3. Basic Concepts II - Entities and Control Flow](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/03.Basic_Concepts_II.pdf)** @@ -32,66 +32,65 @@ **[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 -* **Initialization**: Uniform Initialization +* **Initialization**: Variable initialization, Uniform Initialization, Structure Initialization, Stack Fixed-size array initialization, Dynamic array initialization * **Pointers and References**: Pointer, Address-of operator `&`, Reference * **`const`, `constexpr`, `consteval`, `constinit`** -* **Explicit Type Conversion**: `static_cast`, `const_cast`, `reinterpret_cast`, Type Punning +* **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)** * **Declaration and Definition** -* **Functions**: Pass by-Value, Pass by-Pointer, Pass by-Reference, Overloading, Default Parameters, Attributes -* **Function Objects and Lambda Expressions**: Function Pointer, Function Object (or Functor), Capture List, Other Features, Capture List and Classes -* **Preprocessing**: Preprocessors, Common Errors, Useful Macro, Stringizing Operator (`#`), `#pragma` and `#error`, Token-Pasting Operator (`##`), Variadic Macro +* **Functions**: Pass by-value, Pass by-pointer, Pass by-reference, Overloading, Default parameters, Attributes +* **Function Objects and Lambda Expressions**: Function pointer, Function object (or Functor), Capture list, Other features, Capture list and classes +* **Preprocessing**: Preprocessors, Common errors, Useful macro, Stringizing operator (`#`), `#pragma` and `#error`, Token-Pasting Operator (`##`), Variadic Macro **[6. C++ Object Oriented Programming I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/06.Object_Oriented_I.pdf)** * **C++ Classes** -* **Class Hierarchy**: Access specifiers, Inheritance Access Specifiers -* **Class Constructor**: Default Constructor, Initializer List, Uniform Initialization, Delegate Constructor, `explicit` Keyword +* **Class Hierarchy**: Access specifiers, Inheritance access specifiers +* **Class Constructor**: Default constructor, Initializer list, Uniform initialization, Delegate constructor, `explicit` keyword * **Copy Constructor** * **Class Destructor** -* **Defaulted Members**: Defaulted Constructor +* **Defaulted Members**: Defaulted constructor * **Class Keywords**: `this`, `static`, `const`, `mutable`, `using`, `friend`, `delete` **[7. C++ Object Oriented Programming II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/07.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** -* **Operator Overloading**: Overview, Subscript Operator, Comparison Operator, Function Call Operator, Conversion Operator, Increment and Decrement Operators, Assignment Operator, Stream Operator, Operator Notes -* **C++ Special Objects**: Aggregate, Trivial Class, Standard-Layout Class, Plain Old Data (POD), Hierarchy +* **Operator Overloading**: Overview, Subscript operator `[]`, Comparison operator `<`, Spaceship operator `<=>` Function call operator `()`, Conversion operator `T()`, 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](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/08.Templates_I.pdf)** -* **Function Templates**: Overview, Template Parameters, Template Parameter - Default Value, Specialization, Overloading, `auto` Deduction +* **Function Template**: Overview, Template parameters, Template parameter - default value, Specialization, Overloading, `auto` deduction * **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, Type relation and transformation +* **Template Parameters**: Overview, Special cases **[9. C++ Templates and Meta-programming II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/9.Templates_II.pdf)** -* **Class Template**: Class Specialization, Class + Function - Specialization, `friend` Keyword, Dependent Names, Template Variable +* **Class Template**: Class specialization, Class + Function - specialization, `friend` keyword, Dependent names, Template variable * **Template Meta-Programming** * **SFINAE: Substitution Failure Is Not An Error**: Function SFINAE, Class SFINAE, Class + Function SFINAE * **Variadic Template**: Folding Expression, Variadic Class Template **[10. Translation Units](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/10.Translation_Units.pdf)** -* **Basic Concepts**: Translation Unit, Local and Global Scopes -* **Linkage**: `static` and `extern` Keywords, Internal/External Linkage Example, Linkage of `const` and constexpr, Linkage of `inline` Functions/Variables -* **Variables Storage**: Storage Class, Storage Duration -* **Dealing with Multiple Translation Units**: One Definition Rule (ODR), Class in Multiple Translation Units, Global Constant +* **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` +* **Dealing with Multiple Translation Units**: One Definition Rule (ODR), `inline` functions/variables, Class in multiple translation units, Global variable issues * **Function Template** * **Class Template** -* **Undefined Behavior and Summary** -* **`#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, Compile with Libraries, Build Static/Dynamic Libraries, Find Dynamic Library Dependencies, Analyze Object/Executable Symbols +* **ORD 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 **[11. Code Conventions](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/11.Code_Convention.pdf)** -* **C++ Project Organization**: Project Directories, Project Files, `src/include` directories +* **C++ Project Organization**: Project directories, Project files, `src/include` directories * **Coding Styles and Conventions** * **`#include`** * **Macro and Preprocessing** @@ -99,6 +98,7 @@ * **Variables** * **Functions** * **Structs and Classes** +* **Control Flow** * **Modern C++ Features** * **Maintainability** * **Naming and Formatting** @@ -107,69 +107,71 @@ **[12. Ecosystem](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/12.Ecosystem.pdf)** * **Debugging**: Assertion, Execution Debugging (`gdb`) -* **Memory Debugging**: `valgrind` -* **Sanitizers**: Address Sanitizer, Leak Sanitizer, Memory Sanitizers, Undefined Behavior Sanitizer +* **Memory Debugging**: `valgrind`, Stack protection +* **Sanitizers**: Address sanitizer, Leak sanitizer, Memory sanitizers, Undefined behavior sanitizer * **Debugging Summary** -* **Code Checking and Analysis**: Compiler Warnings, Static Analyzers -* **Code Testing**: Unit Test, Code Coverage, Fuzz Testing +* **Code Checking and Analysis**: Compiler warnings, Static analyzers +* **Code Testing**: Unit test, Code coverage, Fuzz testing * **Code Quality**: `clang-tidy` -* **CMake** +* **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 +* **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 **[13. Utilities](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/13.Utilities.pdf)** * **I/O Stream**: Manipulator, `ofstream/ifstream` * **Math Libraries** -* **Strings**: `std::string`, Conversion from/to Numeric Values, `std::string view`, `std::format` -* **Algorithm Library** -* **Random Number**: Basic Concepts, C++ ``, Seed, PRNG Period and Quality, Distribution - Quasi-random -* **Time Measuring**: Wall-Clock Time, User Time, System Time +* **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` -* **Filesystem Library**: Query Methods, Modify Methods +* **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)** * **Containers and Iterators** * **Sequence Containers**: `std::array`, `std::vector`, `std::list`, `std::deque`, `std::forward_list` -* **Associative Containers**: `std::set`, `std::map` +* **Associative Containers**: `std::set`, `std::map`, `std::multiset` * **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`, Range access methods, Iterator traits * **Algorithms Library**: `std::find_if`, `std::sort`, `std::accumulate`, `std::generate`, `std::remove_if` **[15. Advanced Topics](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/15.Advanced_Topics.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 +* **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 * **Value Categories** * **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 * **`const` Correctness** -* **C++ Idioms**: Rule of Zero/Three/Five, Singleton, PIMPL, CRTP, Template Virtual Functions +* **Undefined Behavior** +* **Error Handling**: C++ Exceptions, Defining custom exceptions, `noexcept` keyword, Memory allocation issues, Alternative error handling approaches +* **C++ Idioms**: Rule of zero/three/five, Singleton, PIMPL, CRTP, Template Virtual Functions * **Smart pointers**: `std::unique_ptr`, `std::shared_ptr`, `std::weak_ptr` * **Concurrency**: Thread Methods, Mutex, Atomic, Task-based parallelism **[16. Optimization I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/16.Optimization_I.pdf)** -* **General Concepts**: Asymptotic Complexity, Optimization Cycle, Ahmdal Law, Performance Bounds, Arithmetic Intensity, Instruction-Level Parallelism, Little’s Law, Time-Memory Trade-off, Roofline Model -* **I/O Operations**: `printf`, Memory Mapped I/O, Speed Up Raw Data Loading -* **Locality and Memory Access Patterns**: Memory Hierarchy, Memory Locality, Internal Structure Alignment, External Structure 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, Recursion -* **Functions**: Function Call Cost, Argument Passing, Function Optimizations, Inlining Constrains, Pointers Aliasing +* **General Concepts**: Asymptotic complexity, Optimization cycle, Ahmdal Law, Throughput, Bandwidth, Latency, Performance Bounds, Arithmetic Intensity +* **Basic Architecture Concepts**: Instruction-level parallelism, Little’s Law, Data-level parallelism, thread-level parallelism, RISC, CISC Instruction sets +* **I/O Operations**: `printf`, Memory Mapped I/O, Speed up raw data loading +* **Locality and Memory Access Patterns**: Memory hierarchy, Memory locality, Internal structure alignment, External structure 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, Recursion +* **Functions**: Function call cost, Argument passing, Function optimizations, Function inlining, Pointers Aliasing * **C++ Objects**: C++ Objects Optimizations **[17. Optimization II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/17.Optimization_II.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) * **Compiler Transformation Techniques** -* **Libraries and Data Structures**: External Libraries, Std Library +* **Libraries and Data Structures**: External libraries, Std library * **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 +* **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 ### Essential Tool ###