解读C++即将到来的重大更新:C++20新特性的四大新特性。最近,C++开发者RainerGrimm正在通过一系列博文介绍C++20的新特性。目前本系列文章更新了两篇。本文为第一篇,主要介绍C++20的四大新特性(概念、作用域、协程和模块四大新特性)和核心语言(包括一些新的运算符和指示符)。C++20有很多更新,上图是C++20更新的概览。下面笔者首先介绍C++20的编译器支持,然后介绍TheBigFour(四大新特性)和核心语言中的新特性。编译器对C++20的支持适应新特性的最简单方法是试用它们。那么我们就面临这样一个问题:哪些编译器支持C++20的哪些特性?一般来说,cppreference.com/compiler_support_可以提供核心语言和库方面的答案。简单地说,新的GCC、Clang和EDG编译器为核心语言提供了最好的支持。此外,MSVC和AppleClang编译器还支持许多C++20功能。C++20核心语言特性。图书馆方面的情况类似。GCC具有最好的库支持,其次是Clang和MSVC编译器。C++20库特性。上面的截图只展示了对应表的第一部分,可以看出这些编译器的性能都不是很理想。即使您使用全新的编译器,这些编译器仍然不支持许多新功能。通常,您可以找到尝试这些新功能的方法。下面举两个例子:concept:GCC支持以前版本的concept;std::jthread:GitHub上有一个实现草案,来自NicolaiJosuttis:https://github.com/josuttis/jthread总之,问题没有那么严重。只需进行一些调整和修改,就可以尝试许多新功能。如有必要,我会提到如何进行此类修改。四个新特性概念(concept)使用模板进行泛型编程的关键思想是定义各种类型(type)可以使用的函数和类。但是,在实例化模板时经常会出现使用错误类型的问题,常常导致页面上出现晦涩难懂的错误信息。既然概念来了,这个问题就可以搁置了。概念允许你为模板编写需求,编译器可以检查这个需求。概念彻底改变了我们思考和编写通用代码的方式。原因如下:模板要求是接口的一部分;类模板中的函数重载或特化可以在概念基础上完成;可以获得更好的错误消息,因为编译器可以将模板参数要求与实际模板参数进行比较。但这还不是全部。您可以使用预定义的概念,或定义您自己的概念;auto和concepts的用法是统一的。您可以使用概念代替汽车;如果一个函数声明使用了一个概念,它会自动成为一个函数模板。由此,写函数模板变得和写函数一样简单。下面的代码片段展示了一个简单概念Integral的定义和用法:;elsereturngcd(b,a%b);}Integral该概念需要std::is_integral
