现代C++学习笔记——第10章 展望: C++20 简介

C++20 如同 C++11 一样,似乎能够成为一个振奋人心的更新。例如,早在 C++11 时期就跃跃欲试呼声极高却最终落选的 Concept,如今已经箭在弦上。 C++ 组委会在讨论投票最终确定 C++20 有很多提案,诸如 Concepts/Module/Coroutine/Ranges/ 等等。本章我们就来一览 C++20 即将引入的那些重要特性。

概念与约束
概念(Concepts)是对 C++ 模板编程的进一步增强扩展。简单来说,概念是一种编译期的特性,它能够让编译器在编译期时对模板参数进行判断,从而大幅度增强我们在 C++ 中模板编程的体验。使用模板进行编程时候我们经常会遇到各种令人发指的错误,这是因为到目前为止我们始终不能够对模板参数进行检查与限制。举例而言,下面简单的两行代码会造成大量的几乎不可读的编译错误:
 

#include <list>
#include <algorithm>
#include <iostream>

int main()
{
    std::list<int> l = {1,2,3};
    for(auto lst: l)
        std::cout << lst << '\t';
    std::cout << std::endl;
    //std::sort(l.begin(), l.end());

    return 0;
}

而这段代码出现错误的根本原因在于, std::sort 对排序容器必须提供随机迭代器,否则就不能使用,而我们知道 std::list 是不支持随机访问的。用概念的语言来说就是: std::list 中的迭代器不满
足 std::sort 中随机迭代器这个概念的约束(Constraint)。在引入概念后,我们就可以这样对模板参数进行约束:
template <typename T>
requires Sortable<T> // Sortable 是一个概念
void sort(T& c);

缩写为:
template<Sortable T> // T 是一个 Sortable 的类型名
void sort(T& c)

甚至于直接将其作为类型来使用:
void sort(Sortable& c); // c 是一个 Sortable 类型的对象
我们现在来看一个实际的例子。
TODO: https://godbolt.org/z/9liFPD
模块
TODO:
合约
TODO:
范围
TODO:
协程
TODO:
事务内存
TODO:
总结
总的来说,终于在 C++20 中看到 Concepts/Ranges/Modules 这些令人兴奋的特性,这对于一门已
经三十多岁『高龄』的编程语言,依然是充满魅力的。

进一步阅读的参考资料
• Why Concepts didn’t make C++17?
• C++11/14/17/20 编译器支持情况
• C++ 历史
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值