#avia-builder-button { display: yes !important; }
Modernes C++
This page is the starting point for my blog Modernes C++. A simple overview of my existing 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
- Relaxed Semantics
- 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
- 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
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++ Parallel STL Benchmark by Victor J. Duvanenko
- Polymorphic Allocators in C++17
- Special Allocators with C++17
- Optimization with Allocators in C++17
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
- The Ranges Library
- Functional Pattern with the Ranges Library
- The Ranges Library in C++20: More Details
- Projections with Ranges
- Sentinels and Concepts with Ranges Algorithms
- Improved Iterators with Ranges
- The Ranges Library in C++20: Design Choices
- The Ranges Library in C++20: More Design Choices
- Pythonic with the Ranges Library
- Pythons range Function, the Second
- Pythons map Function
- Coroutines
- A First Overview
- More Details
- An Infinite Data Stream with Coroutines
- Thread Synchronization with Coroutines
- cppcoro
co_return
:co_yield:
- co_await
- A Concise Introduction to Coroutines by Dian-Lun Lin
- Coroutines: A Scheduler for Tasks by Dian-Lun Lin
- A Priority Scheduler for Coroutines
- An Advanced Priority Scheduler for Coroutines
- A Bug in the Priority Scheduler for Coroutines
- A Coroutine-Based Single Consumer – Single Producer Workflow by Ljubic Damir
- Modules
- The Core Language
- The Three-Way Comparison Operator
- Designated Initializers
- consteval and constinit
- Solving the Static Initialization Order Fiasco
- VariousTemplate Improvements with C++20
- More Powerful Lambdas with C++20
- More Lambda Features with C++20
- New Attributes with C++20
- volatile and other Small Improvements
- The Feature Testing Macros
- The Library
- std::span in C++20: Bounds-Safe Views for Sequences of Objects
- std::span in C++20: More Details
- constexpr std::vector and std::string in C++20
- More Convenience Functions for Containers with C++20
- std::format
- More and More Utilities
- Calendar and Time-Zone
- Time of Day
- Calendar Date
- Handling Calendar Dates
- Time-Zones
- Basic Chrono Terminology
- Basic Chrono Terminology with Time Duration and Time Point
- Time of Day: Details
- Creating Calendar Dates
- Displaying and Checking Calendar Dates
- Query Calendar Dates and Ordinal Dates
- Time Zones: Details
- Time Zones: Online Classes
- Chrono: I/O
- Crono: I/O: Unformatted
- Safe Comparison of Integrals
- Feature Testing
- Bit Manipulation
- Concurrency
- Concepts
C++23
- C++23: The Next C++ Standard
- Core Language
- Library
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, Matt Godbolt, and Honey Sukesan.
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.