Compare commits

..

162 Commits

Author SHA1 Message Date
fbusato
f06595b962 Sync modern-cpp.pdf and html files 2025-04-14 12:47:41 -07:00
fbusato
cfa7dbda27 Update 12.Translation_Units_I.pdf
Fixes #186
2025-04-14 11:44:24 -07:00
Federico
47a42672ea Update 02.Preparation.pdf
Update references
2025-04-11 19:51:18 -07:00
Federico
a9e3135b0b Update 08.Object_Oriented_I.pdf
Fixes #184
2025-04-07 19:46:21 -07:00
Federico
eb235590f4 Update 11.Templates_II.pdf
Fixes #183
2025-02-27 20:29:50 -08:00
Federico
b7c3fd5f9f Update 11.Templates_II.pdf
Fixes #181
Fixes #182
2025-02-25 23:18:24 -08:00
fbusato
1c9d3f2005 html update 2025-02-24 11:17:43 -08:00
fbusato
46d0031b2d Update 25.Software_Design_I.pdf
nit
2025-02-24 11:17:19 -08:00
fbusato
25579c90d9 Update 23.Optimization_II.pdf
- better description of "speed up raw data loading"
- describe limitations of `vector<bool>
- fix Memory alignment code row[1][0]`
- fix "External Structure Alignment" example
- add note on floating-point and constant value propagation
- add not on loop fusion and pure functions
- replace SHA with SHA256
2025-02-24 11:03:36 -08:00
fbusato
f3cf69acc9 Update 22.Optimization_I.pdf
- Fix x86/arm64 assembly example
2025-02-24 11:00:08 -08:00
fbusato
381982525f Update 21.Advanced_Topics_II.pdf
- Improve description of floating-point to integer undefined behavior
- fix `delete[]` -> `delete` in `unique_ptr` example
- Describe `make_shared` constructor vs. factory
- Fix `std::thread` example - parameters passing
- Use `lock_guard` in mutex example
- Specify that `std::atomic` could not be the fastest solution
2025-02-24 10:59:31 -08:00
fbusato
8acb2f8897 Update 20.Advanced_Topics_I.pdf
- Fixes #179
- Refactor Universal Reference examples
- Add all cases for pass by-pointer deduction
2025-02-24 10:55:50 -08:00
fbusato
5e681f5a52 Update 20.Advanced_Topics_I.pdf
fix typos in RVO/NRVO section
2025-02-18 15:09:53 -08:00
Federico
9141830dc8 get rid of Twitter/X 2025-02-13 23:46:17 -08:00
Federico
b26455c1c1 Merge branch 'master' of https://github.com/federico-busato/Modern-CPP-Programming 2025-02-07 19:56:18 -08:00
Federico
425e3d6722 htmls sync 2025-02-07 19:54:06 -08:00
Federico
36da04fd67 Update 18.Utilities.pdf
- fix minor typos
2025-02-07 19:43:05 -08:00
fbusato
e2388403fc Update 19.Iterators_Containers_Alg.pdf
- fix iterator decrementable method
- fix `std::list` example
- fix the description of `priority_queue` methods
2025-02-06 13:10:49 -08:00
fbusato
13bb9df9ff Update 18.Utilities.pdf
- add note about new object for `substr`
- improve `<cmath>` description for `abs`, `ceil`, `floor`, `round`
- improve `tuple` introduction
- fix usages of `variant`, `optional`, and `filesystem`
2025-02-06 12:56:56 -08:00
fbusato
5b64253950 Update 17.Ecosystem.pdf
- replace `make` with `cmake --build`
- fix cmake behavior with `find_package` and `REQUIRED`
2025-02-06 12:15:08 -08:00
fbusato
497eea83a7 Update 16.Debugging.pdf
- Clarified "gdb - Breakpoints" `<ref>`
- Use a single flag for LeakSanitier
- Added `-Werror` and `/WX`
- Clarified the meaning of `<path>` for `gcovr`
2025-02-06 12:04:45 -08:00
fbusato
36c7c5a2ae update htmls 2025-02-03 10:59:10 -08:00
fbusato
88952f06ac Update 15.Code_Convention_II.pdf
- fix `f(nullptr)` with `f(std::null_ptr_t)`
2025-02-03 10:50:44 -08:00
fbusato
610260ac74 Update 14.Code_Convention_I.pdf
- remove `.c` extension
- improve project structure graphic
- add C++17 initialization statements in Variables
2025-02-03 10:49:58 -08:00
fbusato
22c0a3348d Update 13.Translation_Units_II.pdf
- extend dynamic libraries search on Linux and Windows
- Add `LD_DEBUG=libs` for debugging dynamic library loading
2025-02-03 10:48:10 -08:00
fbusato
80a700f245 Update 12.Translation_Units_I.pdf
- Remove `auto` storage class
- Add `inline static` example
2025-02-03 10:46:47 -08:00
fbusato
ae54ce2047 Update 11.Templates_II.pdf
* Improve const pointer deduction slide
* fix typo in template dependent names
2025-01-30 14:36:38 -08:00
fbusato
32db0c7279 Update 10.Templates_I.pdf
* Note about function template overloading precedence
* Remove template parameter edge cases
2025-01-30 14:35:30 -08:00
fbusato
5d5c78a7a5 Update html files 2025-01-30 14:34:16 -08:00
fbusato
7c744d6c17 Update chapter numbers
Fixes #177
2025-01-22 10:35:44 -08:00
fbusato
c9ef7b016d Update 26.Software_Design_II.pdf
Fixes #175
Fixes #176
2025-01-21 11:48:27 -08:00
fbusato
1cd4fe9c2b Update 25.Software_Design_I.pdf
Fixes #174
2025-01-21 11:48:06 -08:00
fbusato
d0f2e38d7f Update 23.Optimization_II.pdf
Fixes #172
Fixes #173
2025-01-21 11:47:29 -08:00
fbusato
81b8263824 Update 22.Optimization_I.pdf
Fixes #171
2025-01-21 11:46:53 -08:00
fbusato
986cd3c311 Update 09.Object_Oriented_II.pdf
Add the override keyword starting from early examples
2025-01-21 11:31:50 -08:00
Federico
ff392ce694 Update latex encoding
Fixes #170
2025-01-19 20:20:37 -08:00
Federico
a00a3769da Update 21.Advanced_Topics_II.pdf
Fixes #165
Fixes #166
Fixes #167
Fixes #168
2025-01-19 19:12:20 -08:00
Federico
3058f89090 Update 20.Advanced_Topics_I.pdf
Fixes #162
Fixes #163
Fixes #164
2025-01-19 19:11:13 -08:00
Federico
27b24c22b8 Update 19.Iterators_Containers_Alg.pdf
Fixes #153
Fixes #154
Fixes #155
Fixes #157
2025-01-18 23:49:07 -08:00
Federico
f9d8ee13b9 Update 18.Utilities.pdf
Fixes #151
Fixes #152
Fixes #156
Fixes #159
2025-01-18 23:47:44 -08:00
Federico
28774d6ceb Update 20.Advanced_Topics_I.pdf
Fixes #158
2025-01-18 23:45:41 -08:00
Federico
ef550dd8c8 Update 15.Code_Convention_II.pdf
Fixes #149
Fixes #150
2025-01-18 23:44:43 -08:00
Federico
7aefe1943c Update 16.Debugging.pdf
Fixes #160
Fixes #161
2025-01-18 23:43:33 -08:00
Federico
f5adf0efc7 Update 12.Translation_Units_I.pdf
Fixes #145
Fixes #146
Fixes #147
Fixes #148
2025-01-18 19:44:21 -08:00
Federico
9999ec05fa Update 11.Templates_II.pdf
Fixes #143
Fixes #144
2025-01-18 19:43:08 -08:00
Federico
4cae38a271 Update 10.Templates_I.pdf
Fixes #142
2025-01-18 19:41:17 -08:00
fbusato
77a2f0bc86 Update 04.Basic_Concepts_II.pdf
Fixes #141
2025-01-16 12:13:08 -08:00
fbusato
7bb0aadf56 Update 09.Object_Oriented_II.pdf
Fixes #139
2025-01-16 12:10:48 -08:00
fbusato
114be91d73 Update 08.Object_Oriented_I.pdf
Fixes #137
2025-01-16 12:09:33 -08:00
fbusato
f4ca57d119 Update 04.Basic_Concepts_II.pdf
Fixes #140
2025-01-14 16:22:50 -08:00
fbusato
1edb6ff55b Update 09.Object_Oriented_II.pdf
Fixes #138
2025-01-14 16:21:46 -08:00
fbusato
29036ce6d2 Update 06.Basic_Concepts_IV.pdf
Fixes #135
2025-01-14 16:19:06 -08:00
fbusato
75115339c9 Update 08.Object_Oriented_I.pdf
Fixes #134
2025-01-14 16:18:07 -08:00
fbusato
72cc567643 Update 19.Iterators_Containers_Alg.pdf
Fixes #133
2025-01-13 15:19:32 -08:00
fbusato
139d92838d Update 05.Basic_Concepts_III.pdf
Fixes #132
2025-01-13 15:18:04 -08:00
Federico
b90acc09a7 Update 19.Iterators_Containers_Alg.pdf
Fixes #130 #131
2025-01-09 23:32:09 -08:00
Federico
442fc2b9a7 Merge branch 'master' of https://github.com/federico-busato/Modern-CPP-Programming 2025-01-09 23:30:48 -08:00
Federico
34e185f6f5 Update 18.Utilities.pdf
Fixes #129
2025-01-09 23:30:23 -08:00
fbusato
03b5ea3661 Update 18.Utilities.pdf
Fixes #128
2025-01-07 11:27:40 -08:00
fbusato
c9b5dd2a2d Update 16.Debugging.pdf
Fixes #125, #126, #127
2025-01-07 11:26:52 -08:00
fbusato
56bc7403ca Update 15.Code_Convention_II.pdf
Fixes #124
2025-01-07 11:25:32 -08:00
Federico
30cd9bfafc Update 14.Code_Convention_I.pdf
Fixes #123
2025-01-05 12:23:06 -08:00
Federico
27fbee27ed Update 12.Translation_Units_I.pdf
Fixes #122
2025-01-05 12:22:02 -08:00
Federico
37ab804233 Update 11.Templates_II.pdf
Fixes #121
2025-01-05 12:19:46 -08:00
Federico
b505b4d301 Update 09.Object_Oriented_II.pdf
Fixes #119, #120
2024-12-28 23:18:02 -08:00
Federico
65bd1a567b Update 06.Basic_Concepts_IV.pdf
Fixes #117
2024-12-28 23:16:35 -08:00
Federico
f4650c1149 Update 06.Basic_Concepts_IV.pdf
Fixes #116
2024-12-26 18:41:16 -08:00
Federico
a8236f6733 Update 02.Preparation.pdf
Fixes #115
2024-12-26 18:40:14 -08:00
Federico
93e10a1017 Update 05.Basic_Concepts_III.pdf
Fixes #114
2024-12-26 18:39:23 -08:00
Federico
cea2329900 Update 23.Optimization_II.pdf
Fixed #113
2024-12-17 22:56:12 -08:00
Federico
2bb5f82e0a Update 06.Basic_Concepts_IV.pdf and README.md
Fixes #111
2024-11-10 22:17:36 -08:00
fbusato
bf64feb893 add modern-cpp.pdf
Fix #110
2024-11-08 09:26:13 -08:00
Federico
5cec82a8f4 Release v1.8.0 2024-11-07 21:55:20 -08:00
Federico
4da0bcc6cb Update 11.Templates_II.pdf
Fixes #109
2024-10-22 15:43:23 +02:00
fbusato
50a2f76ca5 Update 18.Iterators_Containers_Alg.pdf
Fixes #108
2024-08-26 15:11:57 -07:00
Federico
08c8e8fb06 Update 18.Iterators_Containers_Alg.pdf
Fixes #106
2024-08-01 22:08:23 -07:00
sawich
f76c792c6f Fix links in README.md (#105) 2024-07-29 16:34:51 -07:00
fbusato
62719c75cc Update 13.Translation_Units_II.pdf
Fixes #101
2024-05-16 10:14:13 -07:00
Federico
6e5a34f163 Merge branch 'master' of https://github.com/federico-busato/Modern-CPP-Programming 2024-05-05 23:10:48 -07:00
Federico
e230d5a785 Update 04.Basic_Concepts_II and 20.Advanced_Topics_II.pdf
Fixes #100
2024-05-05 23:10:45 -07:00
fbusato
59a9daea05 Update 08.Object_Oriented_I.pdf
Fixes #99
2024-04-29 09:55:18 -07:00
Federico
de8e55fd10 Merge branch 'master' of https://github.com/federico-busato/Modern-CPP-Programming 2024-04-18 22:54:31 -07:00
Federico
00f01e2c44 Update 05.Basic_Concepts_III.pdf
Fixes #95
2024-04-18 22:54:26 -07:00
fbusato
3ff164bb33 Update 21.Optimization_I.pdf
#90
2024-04-15 13:56:49 -07:00
fbusato
8d74011469 Update 06.Basic_Concepts_IV.pdf
Fixes #94
2024-04-15 11:16:09 -07:00
Federico
4946c98e47 Update 06.Basic_Concepts_IV.pdf
Fixes #93
2024-04-14 23:11:36 -07:00
fbusato
fe4e49e863 Update 02.Preparation.pdf 2024-04-10 12:51:43 -07:00
fbusato
4e71cb9e71 Update 10.Templates_I.pdf
Fixes #91
2024-04-09 13:02:45 -07:00
fbusato
ec01f52e22 Update README.md 2024-04-05 13:11:44 -07:00
fbusato
81edc9db04 Update 07.Basic_Concepts_V.pdf
Fixes #88
2024-04-02 10:17:59 -07:00
Federico
3fd98c1eba Release v1.7.0 2024-03-30 17:05:40 -07:00
Federico
2bf93294cd Update 04.Basic_Concepts_III.pdf
Fixes #87
2024-03-29 10:44:24 -07:00
Federico
51138db9ac Update 06.Basic_Concepts_V.pdf
Fixes #86
2024-03-25 20:28:35 -07:00
fbusato
ad91033373 Update 16.Utilities.pdf
Fixes #85
2024-03-19 10:17:48 -07:00
fbusato
509d6b2b85 Update 16.Utilities.pdf
Fixes #85
2024-03-18 16:18:23 -07:00
fbusato
6bdaf4ea32 Update modern-cpp.pdf
Fixes #84
2024-03-18 16:16:35 -07:00
fbusato
35b53172a2 Update 03.Basic_Concepts_II.pdf
Fixes #80
2024-03-18 12:33:31 -07:00
fbusato
05332f39ae Update modern-cpp.pdf
Fixes #84
2024-03-18 12:10:54 -07:00
fbusato
83d53a9524 Update 19.Advanced_Topics_II.pdf
Fixes #83
2024-03-18 12:02:17 -07:00
fbusato
b0a5a23cb5 Update 03.Basic_Concepts_II.pdf
Fixes #82
2024-03-18 11:59:37 -07:00
Federico
8d5c68e99a Update 18.Advanced_Topics_I.pdf
Fixes #81
2024-03-16 23:46:44 -07:00
Federico
1c13649a5b Update 17.Iterators_Containers_Alg.pdf
Fixes #77, #78, #79
2024-03-16 23:40:30 -07:00
Federico
6b78e33641 Update 17.Iterators_Containers_Alg.pdf
Fixes #76 #75 #74 #73
2024-03-12 15:37:51 -07:00
fbusato
8f5cd864bc Update 17.Iterators_Containers_Alg.pdf
Fixes #72
2024-03-11 15:04:19 -07:00
fbusato
f57539a175 Update 13.Code_Convention.pdf
Fixes #71
2024-02-27 11:42:14 -08:00
fbusato
fabc8139ee Update 08.Object_Oriented_II.pdf
Fixes #70
2024-02-26 11:25:02 -08:00
Federico
12ce686a05 Update 05.Basic_Concepts_IV.pdf
Fixes #69
2024-02-20 22:50:42 -08:00
Federico
e5cb382d5e Update 18.Advanced_Topics_I.pdf
Fixes #68
2024-02-19 12:16:08 -08:00
Federico
a9dc790369 Update 04.Basic_Concepts_III.pdf
Fixes #67
2024-02-17 15:41:48 -08:00
fbusato
38789ed119 Update 02.Basic_Concepts_I.pdf
Fixes #66
2024-02-16 12:12:12 -08:00
fbusato
237c0d54b7 Update 02.Basic_Concepts_I.pdf
Fixes #65
2024-02-12 10:07:15 -08:00
fbusato
6ad0835e38 Update 04.Basic_Concepts_III.pdf
Fixes #64
2024-02-12 10:02:09 -08:00
fbusato
d0ee153b2d Update 05.Basic_Concepts_IV.pdf
one more typo
2024-02-09 12:57:03 -08:00
fbusato
aa8bc7e444 Typo fixing
Integrated LanguageTool in my Tex editor and found several typos.
Fixes #63
2024-02-09 12:46:48 -08:00
Federico
ea0b088570 Update README.md 2024-02-07 22:28:28 -08:00
fbusato
3542d72dc0 Update 11.Translation_Units_I.pdf
Fixes #62
2024-02-06 10:27:11 -08:00
Federico
4f262ae34a Update README.md 2024-02-04 21:56:30 -08:00
Federico
c5882e2d0a Merge branch 'master' of https://github.com/federico-busato/Modern-CPP-Programming 2024-02-04 00:02:43 -08:00
Federico
ed5fd14bf5 Update 04.Basic_Concepts_III.pdf
Fixed #61
2024-02-04 00:02:39 -08:00
Nitin Bansal
f1f39b2bbb adding html's (#60)
Co-authored-by: Nitin Bansal <nitin@192.168.1.5>
2024-02-03 23:44:36 -08:00
Federico
90e5148851 Update 19.Advanced_Topics_II.pdf
Fixes #59
2024-01-28 15:07:41 -08:00
Ikko Eltociear Ashimine
378d9776ac Update README.md (#58)
pbjects -> objects
2024-01-28 15:01:35 -08:00
fbusato
70c5a65060 Update 02.Basic_Concepts_I.pdf
Fixes #53
2024-01-26 11:29:34 -08:00
fbusato
c7b0d5982c Update 03.Basic_Concepts_II.pdf
Fixes #51
2024-01-25 12:54:56 -08:00
fbusato
173c7c92a9 Update 03.Basic_Concepts_II.pdf
Fixes #50
2024-01-25 12:51:03 -08:00
fbusato
f0efe83315 Update 22.Optimization_III.pdf
Fixes #48
2024-01-24 10:04:42 -08:00
fbusato
46746df8ff Update 17.Iterators_Containers_Alg.pdf
Fixes #47
2024-01-22 10:57:54 -08:00
fbusato
fe1f6934eb Update 18.Advanced_Topics_I.pdf
Fixes #46
2024-01-18 11:48:27 -08:00
fbusato
056e904e49 Update README.md
#45
2024-01-16 16:58:44 -08:00
fbusato
e87d769085 Fix 'class template' usage
#45
2024-01-16 16:52:26 -08:00
fbusato
9018dfdaa8 Update 17.Iterators_Containers_Alg.pdf
std::iterator template class note
2024-01-16 10:50:40 -08:00
fbusato
002c0c80f8 Update 17.Iterators_Containers_Alg.pdf
improved "Implement a Custom Iterator"  by highlighting std::iterator deprecation #45
2024-01-16 10:23:06 -08:00
fbusato
f16afe68fa Update 04.Basic_Concepts_III.pdf
Fixes #43
2024-01-04 12:48:35 -08:00
fbusato
383c747b07 Fix IEEE754 typo
Fixes #44
2024-01-04 12:13:23 -08:00
fbusato
aea876016d Update 09.Templates_I.pdf
Fixes #42
2023-12-29 09:58:47 -08:00
fbusato
cbd8d114f1 Update 09.Templates_I.pdf
Fixes #41
2023-12-26 10:00:55 -08:00
Federico
db113a2e3f Update 11.Translation_Units_I.pdf
Fixes #40
2023-12-24 15:42:49 -08:00
Federico
54da4a86d0 Update 09.Templates_I.pdf
Fixes #39
2023-12-24 15:33:11 -08:00
Federico
5aa657d2cd Update 09.Templates_I.pdf
Fixes #39
2023-12-23 23:07:48 -08:00
Federico
d9752a4981 Update 08.Object_Oriented_II.pdf
Fixes #38
2023-12-23 00:08:58 -08:00
fbusato
674d5dfa8a Release 1.6.0
pdf files regeneration and README update
2023-12-21 13:34:43 -08:00
fbusato
2765deb98a Update 08.Object_Oriented_II.pdf
Fixes #36 #37
2023-12-21 11:51:23 -08:00
fbusato
0845d53cdb Update 05.Basic_Concepts_IV.pdf
Fixes #35
2023-12-21 11:50:26 -08:00
Federico
81dc24fdce Update 13.Code_Convention.pdf
Fixes #34
2023-12-17 15:17:47 -08:00
Federico
4fcca5c22a Update 05.Basic_Concepts_IV.pdf
Fixes #33
2023-12-14 22:32:08 -08:00
Federico
47c2c5b228 Update 08.Object_Oriented_II.pdf
Fixes #32
2023-12-14 21:58:31 -08:00
Federico
b1dc558c16 Update 07.Object_Oriented_I.pdf
Fixes #30
2023-12-12 23:27:33 -08:00
fbusato
2d8f6517e8 Update 07.Object_Oriented_I.pdf
Fixes #29
2023-12-11 15:48:38 -08:00
fbusato
f1ffd1695e Update 07.Object_Oriented_I.pdf
Fixes #29
2023-12-11 15:14:38 -08:00
fbusato
abc0c896f4 Update 07.Object_Oriented_I.pdf
Fixes #28
2023-12-11 11:28:26 -08:00
fbusato
47b799fa12 Update 05.Basic_Concepts_IV.pdf
Fixes #27
2023-12-06 17:03:35 -08:00
Federico
0aa69c0b8c Update 02.Basic_Concepts_I.pdf
Fixes #26
2023-12-03 16:10:45 -08:00
Federico
e797891cc0 Add all-in-one book
Fixes #25
2023-12-02 16:54:13 -08:00
fbusato
bb4114aa81 Update 07.Object_Oriented_I.pdf
Fixes #24
2023-12-01 10:28:46 -08:00
fbusato
cecf8944bb Fix deferencing typo
Fixes #21
2023-12-01 10:25:26 -08:00
fbusato
90691c6bc6 Update 06.Basic_Concepts_V.pdf
Fixes #19
2023-11-29 11:21:15 -08:00
fbusato
3c7a7ac410 Fix "Table of Contents" typo
Fixes #18
2023-11-29 11:18:55 -08:00
fbusato
cc6b8e0625 Update 15.Ecosystem_II.pdf
Fixes #14, thanks to @Zitrax
2023-11-28 10:58:57 -08:00
fbusato
5c49c8db3f Update 03.Basic_Concepts_II.pdf
Fixes #15, thanks to @f9rocket
2023-11-28 10:57:05 -08:00
fbusato
8351f8b577 Update 01.Introduction.pdf
Fixes #16, thanks to @saw-lau
2023-11-28 10:55:26 -08:00
fbusato
9bc1c648a4 Update 08.Object_Oriented_II.pdf
* Fixed typo in Assignment Operator (thanks @kimsoohwan). Fixes #13
2023-11-27 14:51:19 -08:00
fbusato
d6789cb5f1 Update 08.Object_Oriented_II.pdf
* Fixed typo in operator overloading overview (thanks @kimsoohwan )
2023-11-21 11:27:06 -08:00
63 changed files with 75651 additions and 161 deletions

Binary file not shown.

Binary file not shown.

BIN
02.Preparation.pdf Normal file

Binary file not shown.

BIN
03.Basic_Concepts_I.pdf Normal file

Binary file not shown.

Binary file not shown.

BIN
06.Basic_Concepts_IV.pdf Normal file

Binary file not shown.

Binary file not shown.

BIN
07.Basic_Concepts_V.pdf Normal file

Binary file not shown.

Binary file not shown.

BIN
08.Object_Oriented_I.pdf Normal file

Binary file not shown.

Binary file not shown.

BIN
10.Templates_I.pdf Normal file

Binary file not shown.

Binary file not shown.

BIN
13.Translation_Units_II.pdf Normal file

Binary file not shown.

BIN
15.Code_Convention_II.pdf Normal file

Binary file not shown.

Binary file not shown.

BIN
21.Advanced_Topics_II.pdf Normal file

Binary file not shown.

Binary file not shown.

BIN
23.Optimization_II.pdf Normal file

Binary file not shown.

BIN
25.Software_Design_I.pdf Normal file

Binary file not shown.

BIN
26.Software_Design_II.pdf Normal file

Binary file not shown.

358
README.md
View File

@ -8,154 +8,179 @@
<img src="https://img.shields.io/github/v/release/federico-busato/Modern-CPP-Programming?style=for-the-badge"/>
</a>
</p>
<p align="center">
<a alt="Stars">
<img src="https://img.shields.io/github/stars/federico-busato/Modern-CPP-Programming?style=for-the-badge"/>
</a>
<a href="https://github.com/federico-busato/Modern-CPP-Programming/network/members" alt="Forks">
<img src="https://img.shields.io/github/forks/federico-busato/Modern-CPP-Programming?style=for-the-badge"/>
</a>
</p>
<p align="center">
<a href="https://github.com/federico-busato/Modern-CPP-Programming/commits/master" alt="Commits">
<img src="https://badgen.net/github/commits/federico-busato/Modern-CPP-Programming?style=for-the-badge&scale=1.2"/>
</a>
</p>
<p align="center">
<a href="https://github.com/federico-busato/Modern-CPP-Programming/network/members" alt="Forks">
<img src="https://img.shields.io/github/forks/federico-busato/Modern-CPP-Programming?style=for-the-badge"/>
</a>
<a alt="Stars">
<img src="https://img.shields.io/github/stars/federico-busato/Modern-CPP-Programming?style=for-the-badge"/>
<a href="https://github.com/federico-busato/Modern-CPP-Programming-Material/issues" alt="Issues">
<img src="https://badgen.net/github/closed-issues/federico-busato/Modern-CPP-Programming?style=for-the-badge&scale=1.2"/>
</a>
</p>
## C++11 / C++14 / C++17 / C++20 / (C++23)
## C++03 / C++11 / C++14 / C++17 / C++20 / C++23 / C++26
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.
**Key features**:
- *Free and frequently updated*
- *26 lectures, 1800+ slides*
- Include the *last language standard* concepts and features
- *Practical teaching*: small structured descriptions associated with code
- *Practical teaching*: non-verbose, short 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
If you enjoy the course or you find it useful, please add a **Star**
*If you enjoy the course or you find it useful*, please add a **Star**
[![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)
## CHAPTERS
| | 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)** | 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 |
| # | TITLE | MAIN FOCUS |
| ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| **1** | [**Introduction**](01.Introduction.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/01.Introduction.html)) | History of C/C++, Areas of applications, Course introduction |
| **2** | [**Preparation**](02.Preparation.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/02.Preparation.html)) | Books, How to compile, Hello world |
| **3** | [**Basic Concepts I**](03.Basic_Concepts_I.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/03.Basic_Concepts_I.html)) | Type System, Fundamental types, and Operators |
| **4** | [**Basic Concepts II**](04.Basic_Concepts_II.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/04.Basic_Concepts_II.html)) | Integral and Floating-point types and their arithmetic |
| **5** | [**Basic Concepts III**](05.Basic_Concepts_III.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/05.Basic_Concepts_III.html)) | Entities, Enumerators, Structures, Control flow statements |
| **6** | [**Basic Concepts IV**](06.Basic_Concepts_IV.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/06.Basic_Concepts_IV.html)) | Heap, Stack, Pointers, References, Const properties, Conversion operators |
| **7** | [**Basic Concepts V**](07.Basic_Concepts_V.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/07.Basic_Concepts_V.html)) | Functions, Lambda expressions, Preprocessing directives |
| **8** | [**Object-Oriented Programming I**](08.Object_Oriented_I.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/08.Object_Oriented_I.html)) | Class hierarchy, Constructor, Destructor, Class keywords |
| **9** | [**Object Oriented Programming II**](09.Object_Oriented_II.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/09.Object_Oriented_II.html)) | Polymorphism, Operators overloading |
| **10** | [**Templates and Meta-programming I**](10.Templates_I.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/10.Templates_I.html)) | Function template, Type traits, Compile-time utilities |
| **11** | [**Templates and Meta-programming II**](11.Templates_II.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/11.Templates_II.html)) | Class template, SFINAE |
| **12** | [**Translation Units I**](12.Translation_Units_I.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/12.Translation_Units_I.html)) | Linkage and One Definition Rule |
| **13** | [**Translation Units II**](13.Translation_Units_II.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/13.Translation_Units_II.html)) | Dealing with multiple translation units and files,`#include`, Modules |
| **14** | [**Code Conventions I**](14.Code_Convention_I.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/14.Code_Convention_I.html)) | Project organization, code conventions intro, entities conventions |
| **15** | [**Code Conventions II**](15.Code_Convention_II.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/15.Code_Convention_II.html)) | Template, namespace, modern c++, maintainability , naming, and formatting conventions |
| **16** | [**Debugging and Testing**](16.Debugging.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/16.Debugging.html)) | Execution/memory debugging, Sanitizers, Harding techniques, Unit test, Test-Driven Development |
| **17** | [**Ecosystem**](17.Ecosystem.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/17.Ecosystem.html)) | Cmake, Documenting, and Other Tools |
| **18** | [**Utilities**](18.Utilities.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/18.Utilities.html)) | Main `std` libraries |
| **19** | [**Containers, Iterators, and Algorithms**](19.Iterators_Containers_Alg.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/19.Iterators_Containers_Alg.html)) | Containers, Iterators, Algorithms, Ranges |
| **20** | [**Advanced Topics I**](20.Advanced_Topics_I.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/20.Advanced_Topics_I.html)) | Move semantics, Universal reference, Type deduction |
| **21** | [**Advanced Topics II**](21.Advanced_Topics_II.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/21.Advanced_Topics_II.html)) | Error handling, C++ idioms, Smart pointers |
| **22** | [**Performance Optimizations I**](22.Optimization_I.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/22.Optimization_I.html)) | Ahmdal Law, Performance bounds, Architecture concepts (ILP, SIMD, etc.), Memory hierarchy |
| **23** | [**Performance Optimizations II**](23.Optimization_II.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/23.Optimization_II.html)) | Arithmetic optimizations, Memory optimizations, etc. |
| **24** | [**Performance Optimizations III**](24.Optimization_III.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/24.Optimization_III.html)) | Compiler optimizations, Profiling, Benchmarking tools |
| **25** | [**Software Design I**](25.Software_Design_I.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/25.Software_Design_I.html)) | Basic Concepts, Principles, Use cases |
| **26** | [**Software Design II**](26.Software_Design_II.pdf) ([html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/26.Software_Design_II.html)) | Design Patterns and Idioms |
***ALL-IN-ONE BOOK***: [**modern-cpp.pdf**](modern-cpp.pdf) (could be a few commits behind), [html](https://federico-busato.github.io/Modern-CPP-Programming/htmls/modern-cpp.html)
## TOPICS IN DETAILS
**[1. Introduction](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/01.Introduction.pdf)**
**[1. Introduction](01.Introduction.pdf)**
* **A Little History of C/C++ Programming Languages**
* **Areas of Application and Popularity**
* **C++ Philosophy**
* **C++ Weakness**
* **Books and References**
* **C++ Weakness**: C++ alternatives, Why switching to a new language is hard?
* **The Course**
**[2. Basic Concepts I - Fundamental Types](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/02.Basic_Concepts_I.pdf)**
**[2. Preparation](02.Preparation.pdf)**
* **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, Non-standard arithmetic types, `void` type, Pointer type and `nullptr`
- **Books and References**
- **Slide Legend**
- **What Editor/ IDE/Compiler Should I Use?**
- **How to compile?**
- **Hello World**: I/O Stream
**[3. Basic Concepts I - Type System, Fundamental Types, and Operators](03.Basic_Concepts_I.pdf)**
* **The C++ Type System**: Type categories, Type properties
* **C++ Fundamental Types Overview**: Arithmetic types, Suffix and prefix, Non-standard arithmetic types, `void` type, `nullptr`
* **Conversion Rules**
* **`auto` declaration**
* **C++ Operators**: Operators precedence, Prefix/Postfix increment/decrement, Assignment, Compound , and Comma operators, Spaceship operator `<=>` , Safe Comparison Operators
* **`auto` Keyword**
* **C++ Operators**: Operators precedence, Prefix/Postfix increment/decrement semantic, 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)**
**[4. Basic Concepts II - Integral and Floating-point Types](04.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
* **Integral Data Types**: Fixed width integers, `size_t`, `ptrdiff_t`, `uintptr_t`, Arithmetic Operation Semantics, Promotion, Truncation, Undefined behavior, Saturation Arithmentic
* **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, Limits and useful functions, Arithmetic properties, Special values behavior, Undefined behavior, Detect floating-point errors
* **Floating-point Issues**: Catastrophic cancellation, Floating-point comparison
**[4. Basic Concepts III - Entities and Control Flow](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/04.Basic_Concepts_III.pdf)**
**[5. Basic Concepts III - Entities and Control Flow](05.Basic_Concepts_III.pdf)**
* **Entities**
* **Declaration and Definition**
* **Enumerators**
* **`struct`, Bitfield, `union`**
* **Control Flow**: `if` Statement, `for` Loop, Range-base `for` loop, `switch`, `goto`
* **Control Flow**: `if` statement, `for` and `while` loops, Range-base `for` loop, `switch`, `goto`, Avoid unused variable warning
* **Namespace**: Explicit global namespace, namespace alias, `using`-declaration, `using namespace`-directive, `inline` namespace
* **Attributes**: `[[nodiscard]]`, `[[maybe_unused]]`, `[[deprecated]]`, `[[noreturn]]`
**[5. Basic Concepts IV - Memory Management](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/05.Basic_Concepts_IV.pdf)**
**[6. Basic Concepts IV - Memory Concepts](06.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
* **Pointers and References**: Pointer Operations, Address-of operator `&`, Reference
* **Constant and Literals, `const`, `constexpr`, `consteval`, `constinit`**, `if constexpr`, `std::is constant evaluated()`, `if consteval`
* **Pointers**: Pointer operations, Address-of operator `&`, `struct` member access, `void` pointer, Pointer conversion, Pointer arithmetic, Wild and dangling pointers
* **Heap and Stack**: Stack memory, `new`, `delete`, Non-allocating placement allocation, Non-throwing allocation, Memory leak
* **Initialization**: Variable initialization, Uniform initialization, Array initialization, Structure initialization, Structure Binding, Dynamic memory initialization
* **References**
* **`Const` and Constant Expressions**: Contants and literals, `const`, `constexpr`, `consteval`, `constinit`, `if constexpr`, `std::is constant evaluated()`, `if consteval`
* **`volatile` keyword**
* **Explicit Type Conversion**: `static_cast`, `const_cast`, `reinterpret_cast`, Type punning
* `sizeof` Operator
* **Explicit Type Conversion**: `static_cast`, `const_cast`, `reinterpret_cast`, Type punning, `std::bit_cast`, Uniform initialization conversion, `gls::narrow_cast`
* **`sizeof` Operator**: overview, `[[no_unique_address]]`
**[6. Basic Concepts V - Functions and Preprocessing](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/06.Basic_Concepts_V.pdf)**
**[7. Basic Concepts V - Functions and Preprocessing](07.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
* **Functions**: Pass-by-value, Pass-by-pointer, Pass-by-reference, Function signature and overloading, Overloading and `=delete`, Default parameters
* **Function Pointer and Function Objects**
* **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
* **Lambda Expressions**: Capture list, Lambda expression and function relation, Parameter notes, Composability, Recursion, `constexpr/consteval`, `template`, `mutable`, `[[nodiscard]]`, Capture list and classes
* **Preprocessing**: Preprocessors, Common errors, Source location macros, Conditional compiling macros, Stringizing operator (`#`), `#error` and `#warning`, `#pragma`, Token-pasting operator `##`, Variadic macro
**[7. Object-Oriented Programming I - Class Concepts](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/07.Object_Oriented_I.pdf)**
**[8. Object-Oriented Programming I - Class Concepts](08.Object_Oriented_I.pdf)**
* **C++ Classes**: RAII Idiom
* **Class Hierarchy**: Access specifiers, Inheritance access specifiers
* **Class Constructor**: Default constructor, Class initialization, Uniform initialization, Delegate constructor, `explicit` keyword, `[[nodiscard]]` and classes
* **C++ Classes**: RAII idiom
* **Class Hierarchy**
* **Access specifiers**: Inheritance access specifiers, When use `public/protected/private` for data members?
* **Class Constructor**: Default constructor, Class initialization, Uniform initialization for objects, Delegate constructor, `explicit` keyword, `[[nodiscard]]` and classes
* **Copy Constructor**
* **Class Destructor**
* **Defaulted Constructors, Destructor, and Operators** (`= default`)
* **Class Keywords**: `this`, `static`, `const`, `mutable`, `using`, `friend`, `delete`
**[8. Object-Oriented Programming II - Polymorphism and Operator Overloading](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/08.Object_Oriented_II.pdf)**
**[9. Object-Oriented Programming II - Polymorphism and Operator Overloading](09.Object_Oriented_II.pdf)**
* **Polymorphism**: `virtual` methods, Virtual table, `override` keyword, `final` keyword, Common errors, Pure virtual method, Abstract class and interface
* **Polymorphism**: C++ mechanisms for 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
* **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++ Object Layout**: Aggregate, Trivial class, Standard-layout class, Plain old data (POD), Hierarchy
**[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)**
**[10. Templates and Meta-programming I - Function Templates and Compile-Time Utilities](10.Templates_I.pdf)**
* **Function Template**: Overview, Template parameters, Template parameter - default value, Specialization, Overloading
* **Function Template**: Overview, Template instantiation, Templat parameters, Template parameter - default value, Overloading, Specialization
* **Template Variable**
* **Template Parameter Types**: Generic Type Notes, `auto` Placeholder, Class template parameter type, Array and pointer types, Function type
* **Compile-Time Utilities**: `static_assert`, `decltype` Keyword, `using` Keyword
* **Compile-Time Utilities**: `static_assert`, `using` keyword, `decltype` keyword
* **Type Traits**: Overview, Type traits library, Type manipulation
**[10. Templates and Meta-programming II -  - Class Templates and SFINAE](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/10.Templates_II.pdf)**
**[11. Templates and Meta-programming II - Class Templates and SFINAE](11.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
* **Class Template**: Class specialization, Class template constructor
* **Constructor template automatic deduction (CTAD)**
* **Class Template - Advanced Concepts**: Class + Function - specialization, Dependent names - `typename` and `template` keywords, Class template hierarchy and `using`, `friend` keyword, Template template arguments
* **Template Meta-Programming**
* **SFINAE: Substitution Failure Is Not An Error**: Function SFINAE, Class SFINAE, Class + Function SFINAE
* **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`
* **SFINAE: Substitution Failure Is Not An Error**: Function SFINAE, Class SFINAE
* **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`
* **Template Debugging**
**[11. Translation Units I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/11.Translation_Units_I.pdf)**
**[12. Translation Units I - Linkage and One Definition Rule](12.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
* **Linkage of `const` and `constexpr`**: Static Initialization Order Fiasco
* **Storage Class and Duration**: Storage duration, Storage class, `static` keyword, Anonymous namespace, `extern` keywords
* **Linkage of `const` and `constexpr`**: Static initialization order fiasco
* **Linkage Summary**
* **Dealing with Multiple Translation Units**: Class in multiple translation units
* **One Definition Rule (ODR)**: Global variable issues, ODR - Point 3, `inline` functions/variables, `constexpr` and `inline`
@ -163,140 +188,155 @@ 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**
**[12. Translation Units II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/12.Translation_Units_II.pdf)**
**[13. Translation Units II - Include, Module, and Namespace](13.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 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
- **`#include` Issues**: Include guard, Forward declaration, Circular dependencies, Common linking errors
- **C++20 Modules**: Overview, Terminology, Visibility and reachability, Module unit types, Keywords, Global module fragment, Private module fragment, Header module unit, Module partitions
- **Compiling Multiple Translation Units**: Fundamental compiler flags, Compile Methods
- **Libraries in C++**: Static library, Build static libraries, Using static libraries, Dynamic library, Build dynamic libraries, Using dynamic libraries, Application binary interface (ABI), Demangling, Find Dynamic library dependencies, Analyze object/executable symbols
**[13. Code Conventions](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/13.Code_Convention.pdf)**
**[14. Code Conventions I](14.Code_Convention_I.pdf)**
* **C++ Project Organization**: Project directories, Project files, “Common” Project Organization Notes, Alternative - “Canonical” project organization
* **Coding Styles and Conventions**
* **`#include`**
* **Macro and Preprocessing**
* **Namespace**
* **Variables**
* **Functions**
* **Structs and Classes**
* **Control Flow**
* **Modern C++ Features**
* **Maintainability**
* **Naming**
* **Readability and Formatting**
* **Code Documentation**
* **C++ Project Organization**: Project directories, Project files, "Common" project organization notes, Alternative - “Canonical” project organization
* **Coding Styles and Conventions**: Overview, Popular coding styles
* **Header Files and `#include`**: `#include` guard, `#include` syntax, order of `#include`, Common header/source filename conventions
* **Preprocessing**: Macro, Preprocessing statements
* **Variables**: `static` global variables, conversions
* **Enumerators**
* **Arithmetic Types**: Signed vs. unsigned integral types, integral types conversion, Integral types: size and other issues, Floating-point types
* **Functions**: Function parameters, Function arguments, function return values, Function specifiers, lambda expressions
* **Structs and Classes**: `struct` vs `class`, Initialization, Braced initializer lists, Special member functions, `=default`, `=delete`, Other issues, Inheritance, Style
**[14. Ecosystem I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/14.Ecosystem_I.pdf)**
**[15. Code Conventions II](15.Code_Convention_II.pdf)**
* **Debugging**
* **Assertion**
* **Execution debugging**
* **Memory Debugging**: `valgrind`, Stack protection
* **Sanitizers**: Address sanitizer, Leak sanitizer, Memory sanitizers, Undefined behavior sanitizer
- **`auto`**
- **Templates and Type Deduction**
- **Control Flow**: Redundant control flow , `if/else`, Comparison, `switch`, `for/while`
- **Namespace**: `using namespace` directive, Anoymous/unnamed namespace, Namespace and class design, Style
- **Modern C++ Features**: Keywords, Features, Class, Library
- **Maintainability**: Code comprehension, Functions, Template and Debuction, Library
- Portability
- **Naming**: Entities, Variables, Functions, Style conventions, Enforcing naming styles
- **Readability and Formatting**: Horizontal spacing, Pointers/References, Vertical spacing, Braces, Type decorators, Reduce code verbosity, Other issues
- **Code Documentation**: Function documentation, Comment syntax, File documentation
**[16. Debugging and Testing](16.Debugging.pdf)**
* **Debugging Overview**
* **Assertions**
* **Execution debugging**: Breakpoints, Watchpoints / Catchpoints, Control flow, Stack and info, Print, Disassemble, `std::breakpoint`
* **Memory Debugging**: `valgrind`
* **Hardening Techniques**: Stack usage, Standard library checks, Undefined behavior protections, Control flow protections
* **Sanitizers**: Address sanitizer, Leak sanitizer, Memory sanitizers, Undefined behavior sanitizer, Sampling-baed sanitizer
* **Debugging Summary**
* **Compiler Warnings**
* **Static Analysis**
* **Code Testing**: Unit test, Code coverage, Fuzz testing
* **Code Testing**: Unit testing, Test-Driven Development (TDD), Code coverage, Fuzz testing
* **Code Quality**: `clang-tidy`
**[15. Ecosystem II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/15.Ecosystem_II.pdf)**
**[17. Ecosystem - Cmake and Other Tools](17.Ecosystem.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
- **Other Tools**: Code formatting - `clang-format`, `Compiler Explorer`, Code transformation - `CppInsights`, AI-powered code completion -Local code search - `ugrep`, `ripgrep`, `hypergrep`, Code search engine - `searchcode/grep.app`, Code benchmarking - `Quick-Bench`, Font for coding
**[16. Utilities](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/16.Utilities.pdf)**
**[18. Utilities](18.Utilities.pdf)**
* **I/O Stream**: Manipulator, `ofstream/ifstream`
* **Math Libraries**
* **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
* **View**: `std::span`
* **Math Libraries**
* **Random Number**: Basic concepts, C++ `<random>`, Seed, PRNG period and quality, Distribution, Recent algorithms and Performance, 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`
* **Std Class Templates**: `std::pair`, `std::tuple`, `std::variant`, `std::optional`, `std::any`, `std::stacktrace`
* **Filesystem Library**: Query methods, Modify methods
**[17. Containers, Iterators, and Algorithms](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/17.Iterators_Containers_Alg.pdf)**
**[19. Containers, Iterators, and Algorithms](19.Iterators_Containers_Alg.pdf)**
* **Containers and Iterators**
* **Sequence Containers**: `std::array`, `std::vector`, `std::list`, `std::deque`, `std::forward_list`
* **Sequence Containers**: `std::array`, `std::vector`, `std::deque`, `std::list`, `std::forward_list`
* **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
* **Implement a Custom Iterator**: Implement a simple Iterator
* **Iterator Notes**:
* **Iterator Utility Methods**: `std::advance`, `std::next`, `std::prev`, `std::distance`, Container access methods, Iterator traits
* **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
**[18. Advanced Topics I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/18.Advanced_Topics_I.pdf)**
**[20. Advanced Topics I](20.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, `std::move`, Class declaration semantic
* **Universal Reference and Perfect Forwarding**: Universal reference, Reference collapsing rules, Perfect forwarding
* **Value Categories**
* **`&`, `&&` Ref-qualifiers and `volatile` Overloading**
* **Copy Elision and RVO**
* **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, `auto(x)`: Decay-copy
* **`const` Correctness**
**[19. Advanced Topics II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/19.Advanced_Topics_II.pdf)**
**[21. Advanced Topics II](21.Advanced_Topics_II.pdf)**
- **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
- **Undefined Behavior:** Illegal behavior, Platform specific behavior, unspecified behavior, Detecting undefined behavior
- **Error Handling**: Recoverable error handing, Return code, C++ Exceptions, Defining custom exceptions, `noexcept` keyword, Memory allocation issues, Return code and exception summary, `std::expected`, Alternative error handling approaches
- **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
**[20. Optimization I - Basic Concepts](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/20.Optimization_I.pdf)**
**[22. Optimization I - Basic Concepts](22.Optimization_I.pdf)**
* **Introduction**: Moores Law, Moores 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), Littles 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
* **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 throughput (IPC), In-Order, and Out-of-Order Execution, Instruction pipelining, Instruction-level parallelism (ILP), Littles law, Data-level parallelism (DLP) and vector instructions (SIMD), Thread-level parallelism (TLP), Single Instruction Multiple Threads (SIMT), RISC, CISC instruction sets
* **Memory Hierarchy**: Memory hierarchy concepts, Memory locality, Core-to-core latency and thread affinity, Memory ordering model
**[21. Optimization II - Code Optimization](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/21.Optimization_II.pdf)**
**[23. Optimization II - Code Optimization](23.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
* **Arithmetic**: Data types, Operations, Conversion, Floating-point, Compiler intrinsic functions, Value in a range, Lookup table
* **Control Flow**: Loop hoisting, Loop unrolling, Branch hints, Compiler hints, Recursion
* **Functions**: Function call cost, Argument passing, Function optimizations, Function inlining, Pointers aliasing
* **C++ Objects**: Object RAII optimizations
* **Memory Optimizations**: Heap memory, Stack memory, Cache utilization, Data alignment, Memory Prefetch
* **Arithmetic Types**: Data types, Arithmetic operations, Conversion, Floating-point, Compiler intrinsic functions, Value in a range, Lookup table
* **Control Flow**: Branhes, Branch Hints - `[[likely]]` / `[[unlikely]]`, Signed/Unsigned integers, Loops, Loop hoisting, Loop unrolling, Assertions, Compiler hints `[[assume]]/std::unreacheable()`, Recursion
* **Functions**: Function call cost, Argument passing, Function inlining, Function attributes, Pointers aliasing
* **Object-Oriented Programming**
* **Std Library and Other Language Aspects**
**[22. Optimization III - Non-Coding Optimizations and Benchmarking](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/22.Optimization_III.pdf)**
**[24. Optimization III - Non-Coding Optimizations and Benchmarking](24.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**
* **Libraries and Data Structures**: External libraries, Std library
* **Performance Benchmarking**: What to test?, Workload/Dataset quality, Cache behavior, Stable CPU performance, Program, Multi-threads considerations, Program memory layout, Measurement overhead, Compiler optimizations, Metric evaluation
* **Compiler Optimizations**: About the compiler, Compiler optimization flags, Floating-point optimization flags, Linker optimization flags, Architecture flags, Help the compiler to produce better code, Profile guided optimization (PGO), Post-processing binary optimizer, Polyhedral optimizations
* **Compiler Transformation Techniques**: Basic transformations, Loop unswitching, Loop fusion, Loop fission, Loop interchange, Loop tiling
* **Libraries and Data Structures**
* **Performance Benchmarking**: What to test?, Workload/Dataset quality, Cache behavior, Stable CPU performance, Multi-threads considerations, Program memory layout, Measurement overhead, Compiler optimizations, Metric evaluation
* **Profiling**: `gprof`, `uftrace`, `callgrind`, `cachegrind`, `perf` Linux profiler
* **Parallel Computing**: Concurrency vs. Parallelism, Performance scaling, Gustafsons Law, Parallel programming languages
* **Parallel Computing**: Concurrency vs. parallelism, Performance scaling, Gustafson's Law, Parallel programming languages
**[25. Software Design I - Basic Concepts (DRAFT)](25.Software_Design_I.pdf)**
- **Books and References**
- **Basic Concepts**: Abstraction, interface, and module, Class Invariant
- **Software Design Principles**: Separation of concern, Low coupling, high cohesion, Encapsulation and information hiding, Design by contract, Problem decomposition, Code reuse
- **Software Complexity**: Software entropy, Technical debt
- **The SOLID Design Principles**
- **Class Design**: The class interface principle, Member functions vs. free functions, namespace functions vs. class static methods
- **BLAS GEMM Case Study**
- **Owning Objects and Views**
- **Value vs. Reference Semantic**
- **Global Variables**
**[26. Software Design II - Design Patterns and Idioms (DRAFT)](26.Software_Design_II.pdf)**
- **C++ Idioms**: Rule of Zero, Rule of Three, Rule of Five
- **Design Pattern**: Singleton, Pointer to implementation (PIMPL), Curiously Recurring Template Pattern (CRTP), Template virtual functions
### Roadmap
1. Software Design Chapter
1. Improve Software Design Chapters
2. Build Aspects Chapter (e.g. reducing build time)
### Essential Tool
### Reporting bugs 🐛 and contributing
Online compiler and execution: [CompilerExplorer](https://godbolt.org/)
* for code execution: [Add new..] -> [execution only]
### Reporting bugs and contributing
If you find any typo, conceptual error, or section to improve, please report them by writing directly to me or by using the `issue` panel
<p align="center">
<a href="https://github.com/federico-busato/Modern-CPP-Programming-Material/issues" alt="Issues">
<img src="https://img.shields.io/github/issues-closed/federico-busato/Modern-CPP-Programming?style=for-the-badge"/>
</a>
</p>
If you find any typo, conceptual error, or section to improve, please report them by using the `issue` panel.
## Author
`Federico Busato`
`Federico Busato`, https://federico-busato.github.io/
- Twitter: [twitter.com/fedebusato](https://twitter.com/fedebusato)
- LinkedIn: [www.linkedin.com/in/federico-busato/](https://www.linkedin.com/in/federico-busato/)
- &#127760; LinkedIn: [www.linkedin.com/in/federico-busato/](https://www.linkedin.com/in/federico-busato/)
- &#129419; Bluesky: [fbusato.bsky.social](https://bsky.app/profile/fbusato.bsky.social)

1364
htmls/01.Introduction.html Normal file

File diff suppressed because one or more lines are too long

806
htmls/02.Preparation.html Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1331
htmls/10.Templates_I.html Normal file

File diff suppressed because one or more lines are too long

1930
htmls/11.Templates_II.html Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1984
htmls/16.Debugging.html Normal file

File diff suppressed because one or more lines are too long

1091
htmls/17.Ecosystem.html Normal file

File diff suppressed because one or more lines are too long

2313
htmls/18.Utilities.html Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1629
htmls/22.Optimization_I.html Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

31760
htmls/modern-cpp.html Normal file

File diff suppressed because one or more lines are too long

BIN
modern-cpp.pdf Normal file

Binary file not shown.