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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy