# Modern C++ Programming # ## C++11/C++14/C++17 ## ### Essential Tool ### Online compiler and execution: [CompilerExplorer](https://godbolt.org/) * for code execution: [Add new..] -> [execution only] ## TOPICS ## **[1. Introduction](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/01.Introduction.pdf)** * A Little History of C/C++ Programming Languages * C++ Philosophy * Why C++? * Course Overview and References * Who I Am **[2. Basic Concepts I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/02.Basic_Concepts_I.pdf)** * Prerequirements: Compiler, editor, etc. * Hello World * C++ Primitive Types * Integral Data Types * Floating-point Arithmetic * Floating-point Issues **[3. Basic Concepts II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/03.Basic_Concepts_II.pdf)** * Enumerators * `union` and Bitfield * `using`, `decltype`, and `auto` * Math Operators * Statements and Control Flow **[4. Basic Concepts III](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/04.Basic_Concepts_III.pdf)** * Memory Management: Heap and Stack * Initialization * Pointers and References * `sizeof` Operator * `const` and `constexpr` * Explicit Type Conversion **[5. Basic Concepts IV](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/05.Basic_Concepts_IV.pdf)** * Declaration and Definition * Functions * Preprocessing **[6. Utilities](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/06.Utilities.pdf)** * I/O Stream * Filesystem Library * Math Functions * Algorithm Library * `std::string` and `std::string_view` * Random Numbers * Time Measuring **[7. C++ Object Oriented Programming I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/07.Object_Oriented_I.pdf)** * C++ Classes * Class Constructor * Copy Construcor * Class Destructor * Initialization and Defaulted Members * Class Keywords **[8. C++ Object Oriented Programming II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/08.Object_Oriented_II.pdf)** * Polymorphism * Operator overloading * Special Objects **[9. C++ Templates and Meta-programming I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/09.Templates_I.pdf)** * Function Templates * Compile-Time Utilities * Type Traits * Template Parameters **[10. C++ Templates and Meta-programming II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/10.Templates_II.pdf)** * Class Templates * Template Meta-Programming * SFINAE: Substitution Failure Is Not An Error * Variadic Template * STD Template Utility **[11. Containers, Iterators, and Algorithms](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/11.Iterators_Containers_Alg.pdf)** * Containers and Iterators * Sequence Containers: `array`, `vector`, `list`, `deque`, `forward_list` * Associative Containers: `set`, `map` * Container Adaptors: `stack`, `queue`, `priority_queue` * Implement a Custom Iterator * Iterator Utility Methods * Algorithms Library * Lambda Expressions **[12. Translation Units](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/12.Translation_Units.pdf)** * Basic Concepts * Linkage * Variables Storage * Function Template * Class Template * Undefined Behavior and Summary * `#include` Issues * Namespace * How to Compile: static and dynamic libraries **[13. Code Conventions](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/13.Code_Convention.pdf)** * C++ Project Organization * Coding Styles and Conventions * `#include` and `namespace` * Variables and Prepossessing * Functions and Classes * Modern C++ Features * Control Flow * Naming and Formatting **[14. Ecosystem](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/14.Ecosystem.pdf)** * Execution Debugging: `gdb` and `assert` * Memory Debugging: `valgrind` * Sanitizers: `address`, `leak`, `memory`, `undefined behavior` * Debugging Summary * CMake * Code Checking and Analysis: `warnings` and `static analyzers` * Code Quality: `linters` * Code Testing: `unit test`, `coverage` * Code Commenting: `doxygen` * Code Statistics: `lines count`, `cyclomatic complexity` * Other Tools: code `formating`, `exploring`, `benchmarking` **[15. Advanced Topics](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/15.Advanced_Topics.pdf)** * Move Semantic * Copy Elision and RVO * Type deduction * C++ Idioms: `rule of zero/three/five`, `singleton`, `PILP`, `CRTP` * Smart Pointers * Concurrency: `std::thread` **[16. Optimization I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/16.Optimization_I.pdf)** * General Concepts: asymptotic complexity, optimization cycle, Ahmdal Law, etc. * I/O Operations * Locality and Memory Access Patterns * Arithmetic * Control Flow * Functions * C++ Objects **[17. Optimization II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/17.Optimization_II.pdf)** * Compiler Optimizations * Libraries and Data Structures * Profiling * Parallel Computing ### Reporting bugs and contributing ### 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 ## Author ## * `Federico Busato`, Nvidia Corporation ([fbusato@nvidia.com](mailto:fbusato@nvidia.com)) Dept. of Computer Science, University of Verona (Italy) [federico.busato@univr.it](mailto:federico.busato@univr.it) ## License ## > BSD 3-Clause License > > Copyright (c) 2020, Modern C++ Programming > All rights reserved. > > Redistribution and use in source and binary forms, with or without > modification, are permitted provided that the following conditions are met: > > * Redistributions of source code must retain the above copyright notice, this > list of conditions and the following disclaimer. > > * Redistributions in binary form must reproduce the above copyright notice, > this list of conditions and the following disclaimer in the documentation > and/or other materials provided with the distribution. > > * Neither the name of the copyright holder nor the names of its > contributors may be used to endorse or promote products derived from > this software without specific prior written permission. > > THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" > AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE > IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE > DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE > FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL > DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR > SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER > CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, > OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE > OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.