- A Little History of C/C++ Programming Languages
- Areas of Application and Popularity
- C++ Philosophy
- Books and References
- The Course
2. Basic Concepts I - Fundamental Types
- 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
- 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 - Floating-point Issues: Floating-point Comparison, Catastrophic Cancellation
3. Basic Concepts II - Entities and Control Flow
- Enumerators
struct,union, and Bitfieldusing,decltype, andauto- Control Flow:
ifStatement,forLoop,switch,goto
4. Basic Concepts III - Memory Management
- Heap and Stack: Stack Memory,
new,delete, Memory Leak - Initialization: Uniform Initialization
- Pointers and References: Pointer, Address-of operator
&, Reference const,constexpr,consteval,constinit- Explicit Type Conversion:
static_cast,const_cast,reinterpret_cast, Type Punning sizeofOperator
5. Basic Concepts IV - Functions and Preprocessing
- Declaration and Definition
- Functions: Pass by-Value, Pass by-Pointer, Pass by-Reference, Overloading, Default Parameters,
inlineDeclaration, 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 (
#),#pragmaand#error, Token-Pasting Operator (##), Variadic Macro
6. C++ Object Oriented Programming I
- C++ Classes: RAII, Class Hierarchy, Inheritance Attributes
- Class Constructor: Default Constructor, Delegate Constructor,
explicitKeyword - Copy Constructor
- Class Destructor
- Initialization and Defaulted Members: Initialization List, Uniform Initialization, Defaulted Constructor
- Class Keywords:
this,static,const,mutable,using,friend,delete
7. C++ Object Oriented Programming II
- Polymorphism:
virtualMethods, Virtual Table,overrideKeyword,finalKeyword, Common Errors, Pure Virtual Method, Abstract Class and Interface - 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
8. C++ Templates and Meta-programming I
- Function Templates: Overview, Template Parameters, Template Parameter - Default Value, Specialization, Overloading,
autoDeduction - Compile-Time Utilities:
static_assert,decltypeKeyword,usingKeyword - Type Traits: Overview, Type Traits Library, Type Manipulation, Type Relation and Transformation
- Template Parameters: Overview, Special Cases
9. C++ Templates and Meta-programming II
- Class Template: Class Specialization, Class + Function - Specialization,
friendKeyword, 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
- Basic Concepts: Translation Unit, Local and Global Scopes
- Linkage:
staticandexternKeywords, Internal/External Linkage Example, Linkage ofconstand constexpr, Linkage ofinlineFunctions/Variables - Variables Storage: Storage Class, Storage Duration
- Dealing with Multiple Translation Units: One Definition Rule (ODR), Class in Multiple Translation Units, Global Constant
- Function Template
- Class Template
- Undefined Behavior and Summary
#includeIssues: Forward Declaration, Include Guard, Circular Dependencies, Common Linking Errors- Namespace: Namespace Functions vs.
staticMethods, Namespace Alias, Anonymous Namespace,inlineNamespace - How to Compile: Compile Strategies, Compile with Libraries, Build Static/Dynamic Libraries, Find Dynamic Library Dependencies, Analyze Object/Executable Symbols
- C++ Project Organization: Project Directories, Project Files,
src/includedirectories - Coding Styles and Conventions
**#include**- Macro and Preprocessing
- Namespace
- Variables
- Functions
- Structs and Classes
- Modern C++ Features
- Maintainability
- Naming and Formatting
- Code Documentation
- Debugging: Assertion, Execution Debugging (
gdb) - Memory Debugging:
valgrind - 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 Quality:
clang-tidy - CMake
- 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
- 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++
<random>, 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
14. Containers, Iterators, and Algorithms
- Containers and Iterators
- Sequence Containers:
std::array,std::vector,std::list,std::deque,std::forward_list - Associative Containers:
std::set,std::map - Container Adaptors:
std::stack,std::queue,std::priority_queue - 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 - Algorithms Library:
std::find_if,std::sort,std::accumulate,std::generate,std::remove_if
- Move Semantic:
lvaluesandrvaluesreferences, 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
constCorrectness- 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
- 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
- C++ Objects: C++ Objects Optimizations
- 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
- Profiling:
gprof,uftrace,callgrind,cachegrind,perfLinux 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
Online compiler and execution: CompilerExplorer
- for code execution: [Add new..] -> [execution only]
If you find any typos, conceptual errors, or sections to improve, please report them by writing directly to me or by using the issue panel
Federico Busato,
Nvidia Corporation (fbusato@nvidia.com)
Dept. of Computer Science, University of Verona (Italy) federico.busato@univr.it