全国服务热线:400-035-8011

位置:昆明达内教育IT培训机构 > 学校动态 > c++的新特性

c++的新特性

来源:昆明达内教育IT培训机构时间:2020/8/2 9:11:29

  c++的新特性

  概念(concept)

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

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

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

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

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

c++的新特性

  如果你还没看到 gcd 的真正本质,过几周我还会专门发布一篇介绍概念的文章。

  范围库(Ranges Library)

  范围库是概念的客户。它支持的算法满足以下条件:

  简单来说:范围库支持函数模式(functional patterns)。

  代码可能比语言描述更清楚。下面的函数用竖线符号展示了函数组成:

  even 是一个 lambda 函数,其在 i 为偶数时返回;lambda 函数 square 则会将 i 映射为它的平方。其余的必须从左到右读取的第 i 个函数组成:for (int i : ints | std::view::filter(even) | std::view::transform(square)). 将过滤器 even 应用于 ints 的每个元素,然后将其余的每个元素映射为它们的平方。如果你熟悉函数编程,那么这读起来就像一篇散文诗。

  协程(Coroutines)

  协程是广义的函数,能在保持状态的同时暂停或继续。协程通常用来编写事件驱动型应用。事件驱动型应用可以是模拟、游戏、服务器、用户接口或算法。协程也通常被用于协作式多任务(cooperative multitasking)。

  我们这里不介绍 C++20 的具体协程,而会介绍编写协程的框架。编写协程的框架由 20 多个函数构成,其中一部分需要你去实现,另一部分则可能需要重写。因此,你可以根据需求调整协程。

  下面展示了一个特定协程的用法。下面的程序使用了一个能产生无限数据流的生成器:

  必须补充几句。这段代码只是一个代码段。函数 getNext 是一个协程,因为它使用了关键字 co_yield。getNext 有一个无限的循环,其会在 co_yield 之后返回 value。调用 next()(注释的 第 2、3 行)会继续这个协程,接下来的 getValue 调用会获取这个值。在 getNext 调用之后,这个协程再一次暂停。其暂停会一直持续到下一次调用 next()。我的这个示例中有一个很大的未知,即 getNext 函数的返回值 Generator。这部分内容很复杂,后面我在写协程的文章中更详细地介绍。

  使用 Wandbox 在线编译器,我可以向你展示这个程序的输出:

  解读C++即将迎来的重大更新(一):C++20的新特性

  模块(Module)

  模块部分简单介绍一下就好。模块承诺能够实现:

领取试听课
每天限量名额,先到先得

尊重原创文章,转载请注明出处与链接:http://www.peixun360.com/3172/news/231164/违者必究! 以上就是昆明达内教育IT培训机构 小编为您整理 c++的新特性的全部内容。

温馨提示:提交留言后老师会第一时间与您联系!热线电话:400-035-8011