Non-Profit, International

Spirit unsterblich.

  • C++ Concepts

    字数统计:2829

    C++ 20 的一项重大特性就是概念。虽然 C++ 98 完成后,概念就作为一个语义出现在 C++ 的用户中,但是直到 2019 年,概念才作为一个完善的特性被加入到标准中。由于 C++ 模板的元编程能力是被发现而不是被发明的,所以模板虽然是图灵完备的,但是作为一种编程语言来说缺乏很多特性,导致其使用非常繁琐。Bjarne Stroustrup 在 2003 年写了一篇文章 Concept checking – A more abstract complement to type checking 标题就直截了当的阐述了概念的用途:对类型检查的一个更抽象的补充。

  • std::string_view

    字数统计:1071

    C++ 17 对标准库补充了一些非常使用的容器,std::string_view 就是其中之一,std::string_view 是个只读的字符串视图,解决了传统 C 字符串的孱弱和减少了额外的 std::string 构造。

  • C++ protected 和 private 继承

    字数统计:1390

    C++ 的访问权限控制除了用在成员上,也可以用在继承上,但是 protected 和 private 继承似乎很少被用到,但并不是说 protected 和 private 继承就没有用。

  • C++ 可比较性和三路比较

    字数统计:2777

    三路比较 (Three-Way Comparison) 运算是 C++ 20 新增的一种支持重载的比较运算,旨在解决以往 C++ 需要写过多的比较运算符重载和多次比较效率问题,三路比较运算符又被称为宇宙飞船运算符。三路比较运算并不返回布尔值,而是返回包装枚举的三类对象:std::strong_ordering,std::weak_ordering 和 std::partial_ordering。三路比较使得有序容器的元素插入最坏情况只需要一次三路比较和两次值判断,使得插入字符串这种线性时间比较类的算法的时间复杂度从 Θ(2n) 降低到了 Θ(n),和以往相比简化了一次比较过程从而提高了效率。

  • C++ 命名空间和 using

    字数统计:652

    之前的文章 关于 C++ 类和命名空间作用域的思考 中简要说明了 namespace 的历史。同时 using 被发明出来。而 C++ 11 又由于 typedef 存在缺陷,将 using 的功能扩展,添加了命名别名的功能。

  • C++ 异常 - 智能指针

    字数统计:2802

    之前的两篇文章主要讲述了 C++ 的异常机制,但是单纯靠设计 RAII 类来保证异常安全在许多时候是不够用的,基于此,C++ 11 添加了 std::unique_ptr 和 std::shared_ptr 两种智能指针来解决内存泄漏和异常安全的问题。