2019-03-04 11:34:32 +01:00
|
|
|
# Modern C++ Programming #
|
|
|
|
## C++11/C++14/C++17 ##
|
2018-03-08 12:04:09 +01:00
|
|
|
|
2020-03-01 12:50:30 +01:00
|
|
|
### Essential Tool ###
|
|
|
|
|
|
|
|
Online compiler and execution: [CompilerExplorer](https://godbolt.org/)
|
|
|
|
|
2020-03-22 21:08:02 +01:00
|
|
|
* for code execution: [Add new..] -> [execution only]
|
2018-03-08 12:04:09 +01:00
|
|
|
|
|
|
|
## TOPICS ##
|
|
|
|
|
2020-03-01 13:09:56 +01:00
|
|
|
**[1. Introduction](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/01.Introduction.pdf)**
|
2018-03-08 12:04:09 +01:00
|
|
|
|
2019-03-04 11:29:53 +01:00
|
|
|
* A Little History of C/C++ Programming Languages
|
2020-04-06 12:47:46 +02:00
|
|
|
* Areas of Application and Popularity
|
2018-03-08 12:04:09 +01:00
|
|
|
* C++ Philosophy
|
2020-04-06 12:47:46 +02:00
|
|
|
* Books and References
|
|
|
|
* The Course
|
2018-03-08 12:04:09 +01:00
|
|
|
|
2020-03-01 13:09:56 +01:00
|
|
|
**[2. Basic Concepts I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/02.Basic_Concepts_I.pdf)**
|
2018-03-08 12:04:09 +01:00
|
|
|
|
2020-03-01 12:50:30 +01:00
|
|
|
* Prerequirements: Compiler, editor, etc.
|
2018-03-08 12:04:09 +01:00
|
|
|
* Hello World
|
|
|
|
* C++ Primitive Types
|
2020-03-01 12:50:30 +01:00
|
|
|
* Integral Data Types
|
2019-03-04 11:29:53 +01:00
|
|
|
* Floating-point Arithmetic
|
2020-03-01 12:50:30 +01:00
|
|
|
* Floating-point Issues
|
|
|
|
|
2020-03-01 13:09:56 +01:00
|
|
|
**[3. Basic Concepts II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/03.Basic_Concepts_II.pdf)**
|
2020-03-01 12:50:30 +01:00
|
|
|
|
|
|
|
* Enumerators
|
|
|
|
* `union` and Bitfield
|
|
|
|
* `using`, `decltype`, and `auto`
|
2018-03-08 12:04:09 +01:00
|
|
|
* Math Operators
|
2020-03-01 12:50:30 +01:00
|
|
|
* Statements and Control Flow
|
2018-03-08 12:04:09 +01:00
|
|
|
|
2020-03-01 13:09:56 +01:00
|
|
|
**[4. Basic Concepts III](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/04.Basic_Concepts_III.pdf)**
|
2018-03-08 12:04:09 +01:00
|
|
|
|
|
|
|
* Memory Management: Heap and Stack
|
2020-03-01 12:50:30 +01:00
|
|
|
* Initialization
|
2018-03-08 12:04:09 +01:00
|
|
|
* Pointers and References
|
2020-03-01 12:50:30 +01:00
|
|
|
* `sizeof` Operator
|
|
|
|
* `const` and `constexpr`
|
|
|
|
* Explicit Type Conversion
|
2019-03-04 11:29:53 +01:00
|
|
|
|
2020-03-01 13:09:56 +01:00
|
|
|
**[5. Basic Concepts IV](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/05.Basic_Concepts_IV.pdf)**
|
2019-03-04 11:29:53 +01:00
|
|
|
|
2018-03-08 12:04:09 +01:00
|
|
|
* Declaration and Definition
|
|
|
|
* Functions
|
|
|
|
* Preprocessing
|
|
|
|
|
2020-04-06 12:47:46 +02:00
|
|
|
**[6. C++ Object Oriented Programming I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/06.Object_Oriented_I.pdf)**
|
2019-03-04 11:29:53 +01:00
|
|
|
|
2020-03-01 12:50:30 +01:00
|
|
|
* C++ Classes
|
|
|
|
* Class Constructor
|
2019-03-04 11:29:53 +01:00
|
|
|
* Copy Construcor
|
2020-03-01 12:50:30 +01:00
|
|
|
* Class Destructor
|
|
|
|
* Initialization and Defaulted Members
|
|
|
|
* Class Keywords
|
2019-03-04 11:29:53 +01:00
|
|
|
|
2020-04-06 12:47:46 +02:00
|
|
|
**[7. C++ Object Oriented Programming II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/07.Object_Oriented_II.pdf)**
|
2018-03-08 12:04:09 +01:00
|
|
|
|
|
|
|
* Polymorphism
|
2020-03-01 12:50:30 +01:00
|
|
|
* Operator overloading
|
2020-03-01 13:09:56 +01:00
|
|
|
* Special Objects
|
2018-03-08 12:04:09 +01:00
|
|
|
|
2020-04-06 12:47:46 +02:00
|
|
|
**[8. C++ Templates and Meta-programming I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/08.Templates_I.pdf)**
|
2018-03-08 12:04:09 +01:00
|
|
|
|
|
|
|
* Function Templates
|
2020-03-01 12:50:30 +01:00
|
|
|
* Compile-Time Utilities
|
2018-03-08 12:04:09 +01:00
|
|
|
* Type Traits
|
|
|
|
* Template Parameters
|
|
|
|
|
2020-04-06 12:47:46 +02:00
|
|
|
**[9. C++ Templates and Meta-programming II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/9.Templates_II.pdf)**
|
2018-03-08 12:04:09 +01:00
|
|
|
|
|
|
|
* Class Templates
|
|
|
|
* Template Meta-Programming
|
2020-03-01 12:50:30 +01:00
|
|
|
* SFINAE: Substitution Failure Is Not An Error
|
2018-03-08 12:04:09 +01:00
|
|
|
* Variadic Template
|
|
|
|
|
2020-04-06 12:47:46 +02:00
|
|
|
**[10. Translation Units](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/10.Translation_Units.pdf)**
|
2018-03-08 12:04:09 +01:00
|
|
|
|
2020-03-01 12:50:30 +01:00
|
|
|
* Basic Concepts
|
|
|
|
* Linkage
|
2018-03-08 12:04:09 +01:00
|
|
|
* Variables Storage
|
2020-03-01 12:50:30 +01:00
|
|
|
* Function Template
|
|
|
|
* Class Template
|
|
|
|
* Undefined Behavior and Summary
|
|
|
|
* `#include` Issues
|
2018-03-08 12:04:09 +01:00
|
|
|
* Namespace
|
2020-03-01 12:50:30 +01:00
|
|
|
* How to Compile: static and dynamic libraries
|
2018-03-08 12:04:09 +01:00
|
|
|
|
2020-04-06 12:47:46 +02:00
|
|
|
**[11. Code Conventions](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/11.Code_Convention.pdf)**
|
2019-03-04 11:29:53 +01:00
|
|
|
|
2020-03-01 12:50:30 +01:00
|
|
|
* C++ Project Organization
|
|
|
|
* Coding Styles and Conventions
|
|
|
|
* `#include` and `namespace`
|
|
|
|
* Variables and Prepossessing
|
|
|
|
* Functions and Classes
|
|
|
|
* Modern C++ Features
|
|
|
|
* Control Flow
|
|
|
|
* Naming and Formatting
|
2018-03-08 12:04:09 +01:00
|
|
|
|
2020-04-06 12:47:46 +02:00
|
|
|
**[12. Ecosystem](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/12.Ecosystem.pdf)**
|
2019-03-04 11:29:53 +01:00
|
|
|
|
2020-03-01 12:50:30 +01:00
|
|
|
* Execution Debugging: `gdb` and `assert`
|
|
|
|
* Memory Debugging: `valgrind`
|
|
|
|
* Sanitizers: `address`, `leak`, `memory`, `undefined behavior`
|
|
|
|
* Debugging Summary
|
2018-03-08 12:04:09 +01:00
|
|
|
* CMake
|
2020-03-01 12:50:30 +01:00
|
|
|
* 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`
|
2020-03-22 21:08:02 +01:00
|
|
|
* Other Tools: code `formatting`, `exploring`, `benchmarking`
|
2018-03-08 12:04:09 +01:00
|
|
|
|
2020-04-06 12:47:46 +02:00
|
|
|
**[13. Utilities](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/13.Utilities.pdf)**
|
|
|
|
|
|
|
|
* I/O Stream
|
|
|
|
* STD Template Utility
|
|
|
|
* Filesystem Library
|
|
|
|
* Math Functions
|
|
|
|
* Algorithm Library
|
|
|
|
* `std::string` and `std::string_view`
|
|
|
|
* Random Numbers
|
|
|
|
* Time Measuring
|
|
|
|
|
|
|
|
**[14. Containers, Iterators, and Algorithms](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/14.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
|
|
|
|
|
2020-03-01 13:09:56 +01:00
|
|
|
**[15. Advanced Topics](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/15.Advanced_Topics.pdf)**
|
2018-03-08 12:04:09 +01:00
|
|
|
|
|
|
|
* Move Semantic
|
2020-03-01 12:50:30 +01:00
|
|
|
* Copy Elision and RVO
|
2019-03-04 11:29:53 +01:00
|
|
|
* Type deduction
|
2020-03-01 12:50:30 +01:00
|
|
|
* C++ Idioms: `rule of zero/three/five`, `singleton`, `PILP`, `CRTP`
|
2018-03-08 12:04:09 +01:00
|
|
|
* Smart Pointers
|
2020-03-01 12:50:30 +01:00
|
|
|
* Concurrency: `std::thread`
|
2019-03-04 11:29:53 +01:00
|
|
|
|
2020-03-01 13:09:56 +01:00
|
|
|
**[16. Optimization I](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/16.Optimization_I.pdf)**
|
2019-03-04 11:29:53 +01:00
|
|
|
|
2020-03-01 12:50:30 +01:00
|
|
|
* General Concepts: asymptotic complexity, optimization cycle, Ahmdal Law, etc.
|
2019-03-04 11:29:53 +01:00
|
|
|
* I/O Operations
|
2020-03-01 12:50:30 +01:00
|
|
|
* Locality and Memory Access Patterns
|
2019-03-04 11:29:53 +01:00
|
|
|
* Arithmetic
|
|
|
|
* Control Flow
|
|
|
|
* Functions
|
|
|
|
* C++ Objects
|
2020-03-01 12:50:30 +01:00
|
|
|
|
2020-03-01 13:09:56 +01:00
|
|
|
**[17. Optimization II](https://github.com/federico-busato/Modern-CPP-Programming/blob/master/17.Optimization_II.pdf)**
|
2020-03-01 12:50:30 +01:00
|
|
|
|
2019-03-04 11:29:53 +01:00
|
|
|
* Compiler Optimizations
|
|
|
|
* Libraries and Data Structures
|
|
|
|
* Profiling
|
|
|
|
* Parallel Computing
|
2018-03-08 12:04:09 +01:00
|
|
|
|
|
|
|
### Reporting bugs and contributing ###
|
|
|
|
|
2020-03-01 13:09:56 +01:00
|
|
|
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
|
2018-03-08 12:04:09 +01:00
|
|
|
|
|
|
|
## Author ##
|
|
|
|
|
2020-03-01 13:14:41 +01:00
|
|
|
* `Federico Busato`,<br/>
|
|
|
|
Nvidia Corporation ([fbusato@nvidia.com](mailto:fbusato@nvidia.com))<br/>
|
2020-03-01 13:09:56 +01:00
|
|
|
Dept. of Computer Science, University of Verona (Italy) [federico.busato@univr.it](mailto:federico.busato@univr.it)
|
2018-03-08 12:04:09 +01:00
|
|
|
|
|
|
|
## License ##
|
|
|
|
|
|
|
|
> BSD 3-Clause License
|
|
|
|
>
|
2020-03-01 12:50:30 +01:00
|
|
|
> Copyright (c) 2020, Modern C++ Programming
|
2018-03-08 12:04:09 +01:00
|
|
|
> 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.
|