Home

Awesome

Modern C++ Programming

<p align="center"> <img src="other/cpp_logo.png" /> </p> <p align="center"> <a href="https://github.com/federico-busato/Modern-CPP-Programming/releases" alt="Release"> <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-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++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:

If you enjoy the course or you find it useful, please add a Star

stars - Modern-CPP-Programming

CHAPTERS

#TITLEMAIN FOCUS
1Introduction (html)History of C/C++, Areas of applications, Course introduction
2Preparation (html)Books, How to compile, Hello world
3Basic Concepts I (html)Type System, Fundamental types, and Operators
4Basic Concepts II (html)Integral and Floating-point types and their arithmetic
5Basic Concepts III (html)Entities, Enumerators, Structures, Control flow statements
6Basic Concepts IV (html)Heap, Stack, Pointers, References, Const properties, Conversion operators
7Basic Concepts V (html)Functions, Lambda expressions, Preprocessing directives
8Object-Oriented Programming I (html)Class hierarchy, Constructor, Destructor, Class keywords
9Object Oriented Programming II (html)Polymorphism, Operators overloading
10Templates and Meta-programming I (html)Function template, Type traits, Compile-time utilities
11Templates and Meta-programming II (html)Class template, SFINAE
12Translation Units I (html)Linkage and One Definition Rule
13Translation Units II (html)Dealing with multiple translation units and files,#include, Modules
14Code Conventions I (html)Project organization, code conventions intro, entities conventions
15Code Conventions II (html)Template, namespace, modern c++, maintainability , naming, and formatting conventions
16Debugging and Testing (html)Execution/memory debugging, Sanitizers, Harding techniques, Unit test, Test-Driven Development
17Ecosystem (html)Cmake, Documenting, and Other Tools
18Utilities (html)Main std libraries
19Containers, Iterators, and Algorithms (html)Containers, Iterators, Algorithms, Ranges
20Advanced Topics I (html)Move semantics, Universal reference, Type deduction
21Advanced Topics II (html)Error handling, C++ idioms, Smart pointers
22Performance Optimizations I (html)Ahmdal Law, Performance bounds, Architecture concepts (ILP, SIMD, etc.), Memory hierarchy
23Performance Optimizations II (html)Arithmetic optimizations, Memory optimizations, etc.
24Performance Optimizations III (html)Compiler optimizations, Profiling, Benchmarking tools
25Software Design I (html)Basic Concepts, Principles, Use cases
26Software Design II (html)Design Patterns and Idioms

ALL-IN-ONE BOOK: modern-cpp.pdf (could be a few commits behind), html

TOPICS IN DETAILS

1. Introduction

2. Preparation

3. Basic Concepts I - Type System, Fundamental Types, and Operators

4. Basic Concepts II - Integral and Floating-point Types

5. Basic Concepts III - Entities and Control Flow

6. Basic Concepts IV - Memory Concepts

7. Basic Concepts V - Functions and Preprocessing

8. Object-Oriented Programming I - Class Concepts

9. Object-Oriented Programming II - Polymorphism and Operator Overloading

10. Templates and Meta-programming I - Function Templates and Compile-Time Utilities

11. Templates and Meta-programming II - Class Templates and SFINAE

12. Translation Units I - Linkage and One Definition Rule

13. Translation Units II - Include, Module, and Namespace

14. Code Conventions I

15. Code Conventions II

16. Debugging and Testing

17. Ecosystem - Cmake and Other Tools

18. Utilities

19. Containers, Iterators, and Algorithms

20. Advanced Topics I

21. Advanced Topics II

22. Optimization I - Basic Concepts

23. Optimization II - Code Optimization

24. Optimization III - Non-Coding Optimizations and Benchmarking

25. Software Design I - Basic Concepts (DRAFT)

26. Software Design II - Design Patterns and Idioms (DRAFT)

Roadmap

  1. Improve Software Design Chapters
  2. Build Aspects Chapter (e.g. reducing build time)

Reporting bugs 🐛 and contributing

If you find any typo, conceptual error, or section to improve, please report them by using the issue panel.

Author

Federico Busato, https://federico-busato.github.io/