- Chapter 01: Towards Modern C++
- Chapter 02: Language Usability Enhancements
- Chapter 03: Language Runtime Enhancements
- Chapter 04 Containers
- Chapter 05 Smart Pointers and Memory Management
- Chapter 06 Regular Expression
- Chapter 07 Parallelism and Concurrency
- Chapter 08 File System
- Chapter 09 Minor Features
- Chapter 10 Outlook: Introduction of C++20
- Appendix 1: Further Study Materials
- Appendix 2: Modern C++ Best Practices
C++20 seems to be an exciting update.
For example, as early as C++11, the
which was eager to call for high-altitude but ultimately lost, is now on the line.
The C++ Organizing Committee decided to vote to finalize C++20 with many proposals,
such as Concepts/Module/Coroutine/Ranges/ and so on.
In this chapter, we'll take a look at some of the important features that
C++20 will introduce.
The concept is a further enhancement to C++ template programming. In simple terms, the concept is a compile-time feature. It allows the compiler to evaluate template parameters at compile-time, greatly enhancing our experience with template programming in C++. When programming with templates, we often encounter a variety of heinous errors. This is because we have so far been unable to check and limit template parameters. For example, the following two lines of code can cause a lot of almost unreadable compilation errors:
The root cause of this code error is that
std::sort must provide
a random iterator for the sorting container, otherwise it will not be used,
and we know that
std::list does not support random access.
In the conceptual language, the iterator in
std::list does not satisfy
the constraint of the concept of random iterators in
After introducing the concept, we can constrain the template parameters
template <typename T>
template<Sortable T> // T is a Sortable typename
Even use it directly as a type:
void sort(Sortable& c); // c is a Sortable type object
Let's look at a practical example.
In general, I finally saw the exciting features of Concepts/Ranges/Modules in C++20. This is still full of charm for a programming language that is already in its thirties.
Changkun Ou © 2016-2022. The book is licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0, code is open sourced under the MIT License.
If you like the book, you could donate the author.