C++20 Reference Card

栏目: IT技术 · 发布时间: 4年前

内容简介:While the C++20 Standard is still being finalised and polished, we know all of its core features. At first, the new specification of the language might sound complex and overwhelming. That’s why, if you want to have an overview of the core elements and get

C++20 Reference Card

While the C++20 Standard is still being finalised and polished, we know all of its core features. At first, the new specification of the language might sound complex and overwhelming. That’s why, if you want to have an overview of the core elements and get the bigger picture, you can have a look at my new reference card.

Want your own copy to print?

If you like, I prepared PDF which packs both language and the Standard Library features. Each item has a short description and an example if possible.

C++20 Reference Card

Here’s what the text covers:

<=>
char8_t
explicit(bool)
constexpr
consteval
constinit
std::format
std::span

Special thanks to the CppPolska team , Andrzej Krzemienski ( akrzemi1 ), Łukasz R., Yehezkel B. and many others from my mailing list - for valuable feedback about the features, typos and other improvements.

All of the existing subscribers of my mailing list have already got the new document, so If you want to download it just subscribe here:

Download a free copy of C++20 Ref Card!

Please notice that along with the new ref card you’ll also get C++17 language reference card that I initially published three years ago. With this “package” you’ll quickly learn about all of the latest parts that Modern C++ acquired over the last few years.

Let’s now go through some of the core parts of C++20.

Language Features

Concepts

Constrains on the template parameters and meaningful compiler messages in a case on an error. Can also reduce the compilation time.

template <class T>
concept SignedIntegral = std::is_integral_v<T> &&
                         std::is_signed_v<T>;
template <SignedIntegral T> // no SFINAE here!
void signedIntsOnly(T val) { }

Also with terse syntax:

void floatsOnly(std::floating_point auto fp) { }

(constrained auto )

Modules

The replacement of the header files! With modules, you can divide your program into logical parts.

import helloworld; // contains the hello() function
int main() {
   hello(); // imported from the “helloworld” module!
}

Designated Initializers

Explicit member names in the initializer expression:

struct S { int a; int b; int c; };
S test {.a = 1, .b = 10, .c = 2};

Range-based for with initialiser

Create another variable in the scope of the for loop:

for (int i = 0; const auto& x : get_collection()) {   
    doSomething(x, i);   
    ++i; 
}

Attributes

[[likely]]
[[unlikely]]
[[no_unique_address]]
[[nodiscard]]
[[nodiscard("with message")]]
[[nodiscard]]

consteval

A new keyword that specifies an immediate function – functions that produce constant values, at compile time only. In contrast to constexpr function, they cannot be called at runtime.

consteval int add(int a, int b) { return a+b; }
constexpr int r = add(100, 300);

Others

Plus many more like coroutines, constinit, CTAD updates and more!

Library Features

std::format

Python-like formatting library in the Standard Library!

auto s = std::format("{:-^5}, {:-<5}", 7, 9);

’s` has a value of “–7–, 9—-” centred, and then left aligned

Also supports the Chrono library and can print dates.

Ranges

A radical change in how we work with collections! Rather than use two iterators, we can work with a sequence represented by a single object.

std::vector v { 2, 8, 4, 1, 9, 3, 7, 5, 4 };
std::ranges::sort(v);
for (auto& i: v | ranges:view::reverse) cout << i;

With Ranges, we also get new algorithms, views and adapters.

std::span

A non-owning contiguous sequence of elements. Unlike string_view, span is mutable and can change the elements that it points to.

vector<int> vec = {1, 2, 3, 4};
span<int> spanVec (vec);
for(auto && v : spanVec) v *= v;

Others

Joining thread, semaphores, latches and barriers, Chrono library updates with calendar and timezones, source_location , erase / erase_if container functions, and many more!

Summary

I hope with this concise reference card it will be easier to understand the scope of the new Standard.

Do you like the new features of C++20? What’s your favourite part? Let us know in comments.


以上所述就是小编给大家介绍的《C++20 Reference Card》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

遗传算法

遗传算法

王小平 / 西安交通大学出版社 / 2002-1 / 40.00元

《遗传算法:理论应用与软件实现》全面系统地介绍了遗传算法的基本理论,重点介绍了遗传算法的经典应用和国内外的新发展。全书共分11章。第1章概述了遗传算法的产生与发展、基本思想、基本操作以及应用情况;第2章介绍了基本遗传算法;第3章论述了遗传算法的数学基础;第4章分析了遗传算法的多种改进方法;第5章初步介绍了进化计算理论体系;第6章介绍了遗传算法应用于数值优化问题;第7章介绍了遗传算法应用于组合优化问......一起来看看 《遗传算法》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

随机密码生成器
随机密码生成器

多种字符组合密码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具