加入收藏 | 设为首页 | 会员中心 | 我要投稿 宣城站长网 (https://www.0563zz.cn/)- 数据湖、行业智能、边缘计算、开发、备份!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

解读C++即将迎来的重大更新

发布时间:2021-03-05 13:05:24 所属栏目:外闻 来源:互联网
导读:四大新特性 概念(concept) 使用模板进行通用编程的关键思想是定义能通过各种类型(type)使用的函数和类。但是,在实例化模板时经常会出现用错类型的问题,其结果通常是几页难懂的报错信息。 现在概念来了,这个问题可以休矣。概念让你能为模板编写要求,

四大新特性

概念(concept)

使用模板进行通用编程的关键思想是定义能通过各种类型(type)使用的函数和类。但是,在实例化模板时经常会出现用错类型的问题,其结果通常是几页难懂的报错信息。

现在概念来了,这个问题可以休矣。概念让你能为模板编写要求,而编译器则可以检查这个要求。概念革新了我们思考和编写通用代码的方式。原因如下:

  • 模板的要求是接口的一部分;
  • 类模板中的函数重载或特殊化可以基于概念进行;
  • 因为编译器能够比较模板参数的要求与实际的模板参数,所以能得到更好的报错信息。

但是,这还不是全部。

  • 你可以使用预定义的概念,也可以定义你自己的概念;
  • auto 和概念的用法统一到了一起。你可以不使用 auto,而是使用概念;
  • 如果一个函数声明使用了一个概念,那么它会自动变成一个函数模板。由此,编写函数模板就变得与编写函数一样简单。

下面的代码片段展示了一个简单概念 Integral 的定义和使用方式



 

gcd 算法是基于欧几里德算法确定最大公约数(greatest common divisor)。我使用了这个缩写函数模板句法来定义 gcd。gcd 要求其参数和返回类型支持概念 Integral。gcd 是一类对参数和返回值都有要求的函数模板。当我删除这个句法糖(syntactic sugar)时,也许你能看到 gcd 的真正本质。

下面这段代码在语义上与 gcd 算法等效:

(编辑:宣城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读