As you may know, C++ traditionally introduces new sets of features and improvements every three years. C++ 17, the previous new standard of C++, was released in 2017. So three years later, in 2020, C++ 20 replaced it as the latest C++ version. Originally introduced in February and approved in September of 2020, C++ 20 was officially released in December that year.
Since it has been slightly more than a year since the C++ 20 release, it is probably safe to say that many developers may still be unfamiliar with the new version and the changes that come with it. Especially, considering that C++20 adds more new major features than both its predecessors — C++14 and C++17.
This is why we decided it would be a good idea to compile that list with 13 most important changes and new capabilities introduced in the latest C++ version.
Ranges library and range-based for loop with Initializer
Other important changes and new features in C++ 20
How C++ Builder utilizes innovations of the latest C++ version
Want to know what the cutting edge of C++ development is like?
The incorporation of modules is one of the most important innovations of the latest C++ version. This is a programming technique that relies on separating the functionality of a program into interchangeable modules independent from each other. In C++ 20, developers can create modules to express the logical structure of their code. Additionally, several standalone modules can be combined with each other to form a bigger module.
You could say that the realization of the modules mechanism in C++ more or less mirrors analogous components in Java, C#, and other modern-day programming languages with module support. Using modules allows you to divide large amounts of code into individual groups, resulting in faster compile times and isolation of macros. As well as to significantly reduce dependency on the preprocessor and header files.
For a long time, the C++ development community advocated for adding constraints on template classes and methods. And finally in 2020, with the release of C++ 20, concepts became part of the latest C++ standards.
Here is how the C++ committee describes concepts in C++20: “Class templates, function templates, and non-template functions (typically members of class templates) may be associated with a constraint, which specifies the requirements on template arguments. Named sets of such requirements are called concepts. Each concept is a predicate, evaluated at compile-time, and becomes a part of the interface of a template where it is used as a constraint.”
Here are some examples of concepts in C++ 20:
- convertible_to: Specifies that a type is implicitly convertible to another type;
- integral: Specifies that a type is an integral type;
- same_as: Specifies that a type is the same as another type;
- common_with: Specifies that two types share a common type;
- signed_integral: Specifies that a type is an integral type that is signed;
- unsigned_integral: Specifies that a type is an integral type that is unsigned;
- derived_from: Specifies that a type is derived from another type.
- floating_point: Specifies that a type is a floating-point type.
The ranges library is an extension and generalization of the algorithms and iterator libraries that make them more powerful by making them composable and less error-prone. The library creates and manipulates range views, and lightweight objects that indirectly represent iterable sequences (ranges). The ranges library includes range algorithms, which are applied to ranges eagerly, and range adapters, which are applied to views lazily. Adapters can be composed into pipelines, so that their actions take place as the view is iterated.
Additionally, an init-statement was introduced in C++ 20 for easy initializing of the variables in the loop-scope.
Coroutines in programming are functions used to generalize subroutines for non-preemptive multitasking, as they can temporarily suspend the execution of a code to resume it later. They are used for implementing various program components, such as exceptions, event loops, iterators, cooperative tasks, infinite lists, etc.
The principle of coroutine functions is in suspending execution by returning to the caller and the data that is required to resume execution is stored separately from the stack. This allows for sequential code that executes asynchronously and also supports algorithms on lazy-computed infinite sequences and other uses.
Another notable innovation of C++20 is the introduction of a large number of new keywords. Here are some of them: consteval, concept, co_await, co_return, co_yield, requires, char8_t (for UTF-8 support), constinit, etc.
Here are another 8 changes and new features in C++ 20 that you should know about, briefly:
- Calendar and time-zone additions to <chrono>
- Lambdas in unevaluated contexts
- Template parameter lists on lambdas
- Immediate functions using the new consteval keyword
- A number of improvements to structured bindings, including interaction with lambda captures, static and thread_local storage duration
- New attributes: [[likely]], [[unlikely]], and [[no_unique_address]]
- Revised memory model
- A number of C-derived headers were removed: <ccomplex>, <ciso646>, <cstdalign>, <cstdbool> and <ctgmath>
C++ Builder is a leading rapid development solution that supports the latest C++ version innovations, allowing users to build native Windows C++ and iOS apps up to 10 times faster with less code compared to alternative tools.
Here are some of the most innovative features of C++ Builder.
- Development productivity boosters:
- C++ Code Formatter: automate the layout of your C++ code using clang-format
- Customization of the IDE for Delphi and enhanced C++
- Faster compiles with highly optimized compilers for every platform
- Native, high-speed direct access to InterBase, SQLite, MySQL, SQL Server, Oracle, PostgreSQL, DB2, SQL Anywhere, Advantage DB, Firebird, Access, Informix, MongoDB, and more
- Support of popular libraries such as Boost, Eigen, and ZeroMQ plus leverage a broad range of community tools and libraries
- Integration with version control systems including Git, Subversion and Mercurial
- Advanced design capabilities:
- Visual UI components from multiple certified partners
- Support of using FMX to create cross-platform apps using the same code base
- User interface elements can be connected to data sources using the LiveBindings Designer
- Designs can be validated in real time using Live On-Device Preview to broadcast the active form to multiple devices simultaneously
- Resolution-aware components allow to build fully responsive designs for desktop, tablets, and smartphones
- Fast and accurate debugging features:
- Integrated cross-platform native debugging on Windows and iOS
- Integrated toolchain bringing the designer, compiler, and debugger together into a single development environment
- Conditional breakpoints to quickly pause program execution at a specified location or when a particular condition occurs
- Breakpoints, stack exploration, tool tips and expression evaluation on local and remote machines with live debugging across all deployment platforms
- Development productivity boosters:
In case you would like to try and test all the features and capabilities of modern-day C++ build tools first-hand, there is a trial version of C++ Builder available for free for 30 days. All you need to start the evaluation is to complete the website form.
Additionally, the developers of C++Builder provide live demos of this product for those potential customers who want to see how the innovative features of C++Builder can be used by experienced users.