C++20 系列(一)- Hello C++20

系列文章目录

C++20 系列(一)- Hello C++20

四大模块

毋庸置疑,C++20 将会和 C++11 一样,从根本上改变我们的 C++ 编程方式。C++20 中引入了四大模块:

  • Ranges
  • Coroutines
  • Concepts
  • Modules

Ranges 库使其能够在容器上直接表达算法,通过管道符号组合算法,并将其用于数据流中。

Coroutines 库让 C++ 异步编程能力更加强大,甚至可能成为主流。Coroutines 是多任务合作、事件循环、管道的基础。

Concepts 将改变我们对模板编程的思考与方式。它们能够描述模板具有哪些特性,如果不满足这些特性,你会得到一个简短的错误信息,而不是一大堆不知所云的编译器错误。

Modules 引进了 import 官架子,让 C++ 在 #include 的基础上支持更现代化的模块设计,减轻传统头文件带来的一些问题,提升编译的速度,并带来更简单的构建包的方式。

除了以上四大模块外,还有一些亮点,包括:

  • 三路比较运算符 <=>
  • 字符串字面量作为模板参数
  • 日历和时区功能
  • std::span
  • constexpr 虚函数
  • 重定义 volatile
  • 原子运算补充:std::atomic_refstd::atomic>
  • 新的同步机制,例如信号量(Semaphore)、锁存器(Latch)和屏障(Barrier)
  • constexpr string & vector
  • 改进的线程 std::jthread

编译器支持情况

学习 C++20 最好的方式就是多写多用新特性,如果你想学习它,那么需要一款支持 C++20 的编译器。目前,可以在 cppreference.com/compiler_support 看到各编译器对 C++20 的支持情况。

C++20 系列(一)- Hello C++20_第1张图片
C++20 系列(一)- Hello C++20_第2张图片

上面的截图只是其中一部分,完整列表请大家自行查看。

Hello C++20

有时候安装支持 C++20 的编译器是一件费事费力的事情,好在有在线编译器可以满足我们学习 C++20 的需求,Wandbox 支持在线 C++ 编程,截止目前为止,它支持最新的 gcc 11 和 clang 12.0,这两个最新的编译器已经支持不少新特性,可以愉快的在 Wandbox 上学习了。

让我们写个 Hello World 来开始 C++20 的学习之旅吧。

C++20 中引入了 头文件,提供关于标准库的信息,例如发布时间等。我们试试这个头文件吧

#include 
#include 
using namespace std;

#define COMPILER_FEATURE_VALUE(value) #value
#define COMPILER_FEATURE_ENTRY(name) { #name, COMPILER_FEATURE_VALUE(name) }

struct CompilerFeature {
    CompilerFeature(const char* name = nullptr, const char* value = nullptr)
        : name(name), value(value) {}
    
    const char* name; 
    const char* value;
};

int main()
{
    CompilerFeature x = COMPILER_FEATURE_ENTRY(__cplusplus);
    cout << "name:" << x.name << endl;
    cout << "value:" << x.value << endl;
    return 0;
}

C++20 系列(一)- Hello C++20_第3张图片

总结

C++20 中引入了四大模块以及一堆有用的特性,它将极大的改变 C++ 的编码方式。在cppreference.com/compiler_support 上可以看到编译器对 C++20 的支持情况,并且在 Wandbox上,可以选择 gcc 或者 clang 来学习 C++20。

你可能感兴趣的:(c++,c++20,c++)