Modernes C++
This page is the starting point for my blog Modernes C++. A simple overview of my existing and upcoming posts.
This overview serves two purposes. At first, the structure gives you in one view an overview, which posts are already written and how you can find them. At second, I give you an outline of all posts, which will be written. I will successively refine the outline to make the future of this post transparent. This purpose is a more challenging task for me.
Multithreading in modern C++
C++ memory model
- Overview
- Atomic data types
- Synchronization and ordering constraints
- The different C++ memory models
- Sequential consistency
- Acquire-release semantic
- Wait and Sleep
- Fences
- Algorithms
The threading interface
- Threads
- Thread-local data
- Condition variables
- Tasks
- Condition variables versus tasks for the synchronization of threads
- Challenges
Multithreading with C++17 and C++20
Application of multithreading
- The time library
- Ongoing optimization with CppMem
- Singleton
- Calculating the sum of a std::vector
- The Dining Philosophers Problem
Embedded programming with C++
High safety requirements
- C++11
- Automatic type deduction with auto
- Prevent narrowing with {} initialization
- Guarantees at compile time with static_assert and the type-traits library
- User-defined literals
- Strongly-Typed Enumerations
- override and final
- The null pointer constant nullptr
Performance matters
- C++98
- C++11
- Constant expressions
- Optimization with the type-traits library
- Multithreading interface
- C++ memory model
- Hashtables
- Generalized PODs
- noexcept
- C++14
Careful handling of resources
- Overview
- Automatic memory management
- Smart pointers
- The STL containers
- C++ idioms
- Explicit memory management
- Overloading operator new and delete
- std::allocator
- Strategies for the allocation of memory
- Pros and cons of the various memory allocation strategies
- Memory Pool Allocators by Jonathan Müller
- Overloading operator new and delete
Functional programming with C++
- Overview
- Functional Feature in C++
- The definition
- Characteristics of functional programming
- Functional programming with C++17 and C++20
Design Patterns and Architectural Patterns
- A First Overview
- Introduction
- Terminology
- Design Patterns
- Creational Patterns
- Structural Patterns
- Behavioral Pattern
- Idioms
- General
- Classes
- Polymorphism
- Templates
- Architectural Patterns
- Concurrency
C++17
- Core language
- Library
- std::byte
- std::filesystem
- std::string_view
- std::any, std::optional, and std::variant
- The New Algorithm of the STL
- Improved associative containers and uniform container access
- Parallel Algorithms of the STL with the GCC compiler
- Performance of the Parallel STL Algorithms
C++20
- The Next Big Thing: C++20
- Overview
- Details
- Concepts
- Two Extremes and the Rescue with Concepts
- The Details
- The Placeholder Syntax
- Syntactic Sugar
- What we don’t get
- Predefined Concepts
- Define Concepts
- Define Concepts (Logical Combination of other Concepts or Compile-Time Predicates)
- Defining Concepts with Requires Expressions
- Using Requires Expressions in C++20 as a Standalone Feature
- Define the Concepts Equal and Ordering
- Define the Concepts Regular and SemiRegular
- Check Types with Concepts – The Motivation
- Check Types with Concepts
- Concepts in C++20: An Evolution or a Revolution?
- Ranges Library
- Coroutines
- A First Overview
- More Details
- An Infinite Data Stream with Coroutines
- Thread Synchronization with Coroutines
- cppcoro
co_return
:co_yield:
- co_await
- Modules
- The Core Language
- The Library
- Concurrency
- Concepts
C++23
C++ Core Guidelines
- Two highly valuable resources
- Why do we need guidelines for modern C++?
- The C++ Core Guidelines:
- The Philosophy
- Interfaces I
- Interfaces II
- Guideline Support Library
- Functions
- Classes
- Enums
- Resources
- Expressions and Statements
- Performance
- Concurrency and Parallelism
- Rules about Concurrency and Parallelism
- More Rules about Concurrency and Parallelism
- Tools to Validate Concurrent-Code
- Sharing Data between Threads
- Taking Care of your Child
- More Traps in the Concurrency
- Be Aware of the Traps of Condition Variables
- Concurrency and lock-free Programming
- The Resolution of the Riddle
- The Remaining Rules of lock-free Programming
- Error Handling
- Constants and Immutability
- Templates and Generic Programming
- Rules for Templates and Generic Programming
- Type Erasure
- Type Erasure with Templates
- Better Specific or Generic?
- Usage of Concepts
- Definition of Concepts
- Definition of Concepts 2
- Pass Function Objects as Operations
- Template Interfaces
- Regular and SemiRegular Types
- Surprises with Argument-Dependent Lookup
- Template Definitions
- Ordering of User-Defined Types
- Templates and Hierarchies
- Rules for Variadic Templates
- Rules for Template Metaprogramming
- Programming at Compile Time
- Programming at Compile Time with the Type-Traits
- Programming at Compile Time with the Type-Traits (The Second)
- Programming at Compile Time with constexpr
- Other Template Rules
- Surprise Includes with Function Template Specialisation
- Templates: Misconceptions and Surprises
- Types, Non-Types, and Templates as Template Parameters
- C-Style Programming
- Source
- The Standard Library
- The Standard Library
- std::array and std::vector are your Friends
- More special Friends with std::map and std::unordered_map
- Avoid Bounds Errors
- Rules for Strings
- IOStreams
- In- and Output with Streams
- Improved Performance with Iostreams
- The Regular Expression Library
- More Rules about the Regular Expression Library
- When RAII breaks
- Supporting Sections
Templates
- First Steps
- Basics
- Function Templates
- Class Templates
- Alias Templates and Template Parameters
- Template Arguments
- Template Specialization
- Details
- Template Instantiation
- Variadic Templates and Fold Expressions
- The Special Friendship of Templates
- Dependent Names
- Techniques
- Automatic Return Type
- Template Metaprogramming
- Type-Traits Library
constexpr
constexpr if
- Design
Review
News
- No New New
- CppCon 2018
- Meeting Embedded and Meeting C++ 2018
- Compiler Explorer, PVS-Studio, and Terrible Simple Bugs
- Quo Vadis – Modernes C++
Tools
Thanks a lot to my Patreon Supporters: Matt Braun, Roman Postanciuc, Tobias Zindl, G Prvulovic, Reinhold Dröge, Abernitzke, Frank Grimm, Sakib, Broeserl, António Pina, Sergey Agafyin, Андрей Бурмистров, Jake, GS, Lawton Shoemake, Jozo Leko, John Breland, Venkat Nandam, Jose Francisco, Douglas Tinkham, Kuchlong Kuchlong, Robert Blanch, Truels Wissneth, Mario Luoni, Friedrich Huber, lennonli, Pramod Tikare Muralidhara, Peter Ware, Daniel Hufschläger, Alessandro Pezzato, Bob Perry, Satish Vangipuram, Andi Ireland, Richard Ohnemus, Michael Dunsky, Leo Goodstadt, John Wiederhirn, Yacob Cohen-Arazi, Florian Tischler, Robin Furness, Michael Young, Holger Detering, Bernd Mühlhaus, Stephen Kelley, Kyle Dean, Tusar Palauri, Juan Dent, George Liao, Daniel Ceperley, Jon T Hess, Stephen Totten, Wolfgang Fütterer, Matthias Grün, Phillip Diekmann, Ben Atakora, Ann Shatoff, Rob North, Bhavith C Achar, Marco Parri Empoli, Philipp Lenk, Charles-Jianye Chen, Keith Jeffery,and Matt Godbolt.
Thanks, in particular, to Jon Hess, Lakshman, Christian Wittenhorst, Sherhy Pyton, Dendi Suhubdy, Sudhakar Belagurusamy, Richard Sargeant, Rusty Fleming, John Nebel, Mipko, Alicja Kaminska, Slavko Radman, and David Poole.
My special thanks to Embarcadero | |
My special thanks to PVS-Studio | |
My special thanks to Tipi.build | |
My special thanks to Take Up Code | |
My special thanks to SHAVEDYAKS |
Modernes C++ GmbH
Modernes C++ Mentoring (English)
Rainer Grimm
Yalovastraße 20
72108 Rottenburg
Mail: schulung@ModernesCpp.de
Mentoring: www.ModernesCpp.org
Modernes C++ Mentoring,
Modernes C++ Mentoring
Do you want to stay informed: Subscribe.
Leave a Reply
Want to join the discussion?Feel free to contribute!