C++20 要来了!

论坛 期权论坛 期权     
CSDN   2019-6-16 03:57   2058   0
C++的新标准又双叒叕要到来了,是的,C++20要来了!


图片来源:udemy.com
几周前,C++标准委会历史上规模最大的一次会议(180人参会)在美国San Diego召开,这次的会议上讨论确定哪些特性要加入到C++20中,哪些特性可能加入到C++20中。在明年二月份的会议当中将正式确定所有的C++20特性。
这次会议讨论的提案也是非常之多,达到了创纪录的274份,C++20的新特性如果要一一列出的话将是一份长长的清单,因此本文将只评论大部分确定要加入和可能加入到C++20的重要特性,让读者对C++的未来和演进趋势有一个基本的了解。
C++20中可能增加哪些重要特性,下面这个图可以提供一个参考。


下面是本文将评论的将进入和可能进入C++20的重要特性:
  • Concepts
  • Ranges
  • Modules
  • Coroutines
  • Reflection
接下来让我们慢慢揭开C++20的面纱,看看这些特性到底是什么样的,它们解决了什么问题。



Concepts

在谈Concepts之前我想先介绍一下Concepts提出的背景和原因。众所周知,因为C++的模版和模版元具备非常强大的泛型抽象能力并且是zero overhead,所以模版在C++中备受推崇,大获成功,在各种C++库(如STL)中被广泛使用。
然而,模版编程还存在一些问题,比如有些模版的代码写起来比较困难,读起来比较难懂,尤其是编译出错的时候,那些糟糕的让人摸不着头脑的错误提示让人头疼。因此,C++之父Bjarne Stroustrup很早就希望对模版做一些改进,让C++的模版编程变得简单好写,错误提示更明确。他早在1987年就开始做这方面的尝试了。


C++之父Bjarne Stroustrup
具体思路就是给模版参数加一些约束,这些约束相比之前的写法具有更强的表达能力和可读性,会简化C++的泛型模版代码的编写。
所以Concepts的出现主要是为了简化泛型编程,一个Concept就是一个编译期判断,用于约束模版参数,Concepts则是这些编译期判断的合集。下面通过一个例子来展示Concepts是如何简化模版编程的。
[code]    template    class B {    public:      template      typename std::enable_if_t      to_string() const {        return "Class B";      }    };    B b1;                             // OK    std::cout
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:65
帖子:240
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP