Skip to content

Commit 212ab24

Browse files
November - Update 1
- Basic Concepts: added a macro common error, IDE rank updated - Ecosystem: A couple of CMake improvements, valgrind version updated - Translation Units: static initialization order fiasco*, small namespace improvements - Templates: std type traits specialization - Advanced Concepts: ref-qualified overloading, added other RVO examples - Optimizations: Object vectorization - README updated
1 parent 9fbd8ee commit 212ab24

9 files changed

+33
-13
lines changed

02.Basic_Concepts_I.pdf

4.09 KB
Binary file not shown.

04.Basic_Concepts_III.pdf

-8 Bytes
Binary file not shown.

05.Basic_Concepts_IV.pdf

2.58 KB
Binary file not shown.

09.Templates_II.pdf

2.3 KB
Binary file not shown.

10.Translation_Units.pdf

2.74 KB
Binary file not shown.

12.Ecosystem.pdf

18.8 KB
Binary file not shown.

15.Advanced_Topics.pdf

3.05 KB
Binary file not shown.

16.Optimization_I.pdf

-107 Bytes
Binary file not shown.

README.md

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,20 @@
11
# Modern C++ Programming #
22
## C++11 / C++14 / C++17 / (C++20) ##
33

4+
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.
5+
6+
**Key features**:
7+
8+
- *Free and frequently updated*
9+
- Include the *last language standard* concepts and features
10+
- *Practical teaching*: small structured descriptions associated to code
11+
- *Minimal code examples* for showing just a specific feature or issue without digressing
12+
- *Complementary language aspects*: tools, coding conventions, project organization, and code optimization
13+
- *Experience-based*: many aspects, examples, and problems come from real-world cases faced during my work as software engineer
14+
15+
If you enjoy the course or you find it useful, please add a **Star**
16+
[![stars - Modern-CPP-Programming](https://img.shields.io/github/stars/federico-busato/Modern-CPP-Programming?style=social)](https://github.com/federico-busato/Modern-CPP-Programming)
17+
418
## TOPICS ##
519

620
**[1. Introduction](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/01.Introduction.pdf)**
@@ -17,10 +31,10 @@
1731
* **Hello World**: I/O Stream
1832
* **C++ Fundamental Types Overview**: Arithmetic types, Non-standard arithmetic types, `void` type, Pointer type and `nullptr`
1933
* **Conversion Rules**
20-
* **C++ Operators**: Operators precedence, Prefix/Postfix increment/decrement, Assignment and comma operators, Spaceship operator `<=>`
21-
* **Integral Data Types**: Fixed width integers, When use signed/unsigned integer? Promotion, Truncation, Undefined Behavior
34+
* **C++ Operators**: Operators precedence, Prefix/Postfix increment/decrement, Assignment, Compound , and comma operators, Spaceship operator `<=>`
35+
* **Integral Data Types**: Fixed width integers, When use signed/unsigned integer? Promotion, Truncation, Undefined behavior
2236
* **Floating-point Types and Arithmetic**: Normal/Denormal values, Not a Number (`NaN`), Infinity, Properties
23-
* **Floating-point Issues**: Floating-point Comparison, Catastrophic Cancellation
37+
* **Floating-point Issues**: Floating-point comparison, Catastrophic cancellation
2438

2539
**[3. Basic Concepts II - Entities and Control Flow](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/03.Basic_Concepts_II.pdf)**
2640

@@ -32,7 +46,7 @@
3246
**[4. Basic Concepts III - Memory Management](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/04.Basic_Concepts_III.pdf)**
3347

3448
* **Heap and Stack**: Stack Memory, `new`, `delete`, Memory Leak
35-
* **Initialization**: Variable initialization, Uniform Initialization, Structure Initialization, Stack Fixed-size array initialization, Dynamic array initialization
49+
* **Initialization**: Variable initialization, Uniform initialization, Structure initialization, Fixed-size array initialization, Dynamic array initialization
3650
* **Pointers and References**: Pointer, Address-of operator `&`, Reference
3751
* **`const`, `constexpr`, `consteval`, `constinit`**
3852
* **Explicit Type Conversion**: `static_cast`, `const_cast`, `reinterpret_cast`, Type punning
@@ -79,7 +93,7 @@
7993
**[10. Translation Units](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/10.Translation_Units.pdf)**
8094

8195
* **Basic Concepts**: Translation unit, Local and global scope, Linkage
82-
* **Storage Class and Duration**: Storage duration, Storage class, `static` and `extern` keywords, Internal/External linkage examples, Linkage of `const` and `constexpr`
96+
* **Storage Class and Duration**: Storage duration, Storage class, `static` and `extern` keywords, Internal/External linkage examples, Linkage of `const` and `constexpr`, Static Initialization Order Fiasco
8397
* **Dealing with Multiple Translation Units**: One Definition Rule (ODR), `inline` functions/variables, Class in multiple translation units, Global variable issues
8498
* **Function Template**
8599
* **Class Template**
@@ -106,7 +120,7 @@
106120

107121
**[12. Ecosystem](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/12.Ecosystem.pdf)**
108122

109-
* **Debugging**: Assertion, Execution Debugging (`gdb`)
123+
* **Debugging**: Assertion, Execution debugging (`gdb`)
110124
* **Memory Debugging**: `valgrind`, Stack protection
111125
* **Sanitizers**: Address sanitizer, Leak sanitizer, Memory sanitizers, Undefined behavior sanitizer
112126
* **Debugging Summary**
@@ -135,7 +149,7 @@
135149
* **Associative Containers**: `std::set`, `std::map`, `std::multiset`
136150
* **Container Adaptors**: `std::stack`, `std::queue`, `std::priority_queue`
137151
* **View**: `std::span`
138-
* **Implement a Custom Iterator**: Semantic, Implement a Simple Iterator
152+
* **Implement a Custom Iterator**: Semantic, Implement a simple Iterator
139153
* **Iterator Utility Methods**: `std::advance`, `std::next`, `std::prev`, `std::distance`, Range access methods, Iterator traits
140154
* **Algorithms Library**: `std::find_if`, `std::sort`, `std::accumulate`, `std::generate`, `std::remove_if`
141155

@@ -144,6 +158,7 @@
144158
* **Move Semantic**: `lvalues` and `rvalues` references, Move semantic, Compiler implicitly declared, `std::move`
145159
* **Universal Reference and Perfect Forwarding**: Universal reference, Reference collapsing rules, Perfect forwarding
146160
* **Value Categories**
161+
* **`&`, `&&` Overloading - Ref-qualifiers**
147162
* **Copy Elision and RVO**
148163
* **Type Deduction**: Pass by-reference, Pass by-pointer, Pass by-value
149164
* **`const` Correctness**
@@ -155,7 +170,7 @@
155170

156171
**[16. Optimization I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/16.Optimization_I.pdf)**
157172

158-
* **General Concepts**: Asymptotic complexity, Optimization cycle, Ahmdal Law, Throughput, Bandwidth, Latency, Performance Bounds, Arithmetic Intensity
173+
* **General Concepts**: Asymptotic complexity, Optimization cycle, Ahmdal's Law, Throughput, Bandwidth, Latency, Performance Bounds, Arithmetic Intensity
159174
* **Basic Architecture Concepts**: Instruction-level parallelism, Little’s Law, Data-level parallelism, thread-level parallelism, RISC, CISC Instruction sets
160175
* **I/O Operations**: `printf`, Memory Mapped I/O, Speed up raw data loading
161176
* **Locality and Memory Access Patterns**: Memory hierarchy, Memory locality, Internal structure alignment, External structure alignment
@@ -173,6 +188,12 @@
173188
* **Performance Benchmarking**: What to test?, Workload/Dataset quality, Cache behavior, Stable CPU performance, Program memory layout
174189
* **Parallel Computing**: Concurrency vs. Parallelism, Performance scaling, Gustafson’s Law, Parallel programming languages
175190

191+
### Roadmap
192+
193+
1. Complete C++20 topics
194+
2. Software Design Chapter
195+
3. Build Aspects Chapter (e.g. reducing build time)
196+
176197
### Essential Tool ###
177198

178199
Online compiler and execution: [CompilerExplorer](https://godbolt.org/)
@@ -187,8 +208,7 @@ If you find any typos, conceptual errors, or sections to improve, please report
187208

188209
`Federico Busato`
189210

190-
- Nvidia Corporation ([fbusato@nvidia.com](mailto:fbusato@nvidia.com))
191-
- Dept. of Computer Science, University of Verona (Italy) [federico.busato@univr.it](mailto:federico.busato@univr.it)
192-
- https://twitter.com/fedebusato
193-
- https://www.linkedin.com/in/federico-busato/
194-
211+
- Nvidia Corporation [fbusato@nvidia.com](mailto:fbusato@nvidia.com)
212+
- Dept. of Computer Science, University of Verona, Italy [federico.busato@univr.it](mailto:federico.busato@univr.it)
213+
- Twitter: [twitter.com/fedebusato](https://twitter.com/fedebusato)
214+
- Linkedin: [www.linkedin.com/in/federico-busato/](https://www.linkedin.com/in/federico-busato/)

0 commit comments

Comments
 (0)