现代 C++ 编程实战
吴咏炜
前 Intel 资深软件架构师
35984 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 58 讲
现代 C++ 编程实战
15
15
1.0x
00:00/00:00
登录|注册

46 | 飞船运算符、consteval、constinit和jthread:C++20的若干重要小改进

你好,我是吴咏炜。
在前面,我已经陆陆续续讨论了不少 C++20 的改进(“模块”即使在 2025 年也没有成熟到可以方便地跨平台广泛应用,因此我决定还是暂不讨论)。除此之外,C++20 还包含好些小改进,可以让我们快速用起来,帮助我们更方便地写出更“好”的代码。本讲我就讨论一下 C++20 里其他四种重要的、可以快速应用到开发中的改进。

比较运算和飞船运算符

比较是件麻烦事

C++ 里实现对象的比较是件麻烦事。即使对于同类型的对象,我们传统上也需要实现六个不同的比较运算符(不同类型的对象就更麻烦了,还要考虑参数的顺序问题,通常导致数量翻倍):
operator==
operator!=
operator<
operator<=
operator>
operator>=
典型情况下,我们只实现 ==<,然后让其他运算符调用这两个的实现,形如:
bool operator>(const Obj& lhs,
const Obj& rhs)
{
return rhs < lhs;
}
bool operator>=(const Obj& lhs,
const Obj& rhs)
{
return !(lhs < rhs);
}
那我们能不能只提供部分运算符,如只提供 operator<operator==,让编译器生成其余的运算符?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. C++20引入了飞船运算符`operator<=>`和新的顺序关系类型,使得对象的比较更加灵活和准确。 2. C++20的改进简化了比较运算符的实现,通过自动提供`operator<=>`和新的顺序关系类型,帮助程序员更方便地写出更“好”的代码,提高开发效率和代码质量。 3. 引入了`consteval`特性,可以强制函数在编译时求值,提高了编译时检查的效果。 4. 引入了`constinit`特性,可以在编译期初始化静态对象,打通编译期的世界和运行期的世界,非常有用。 5. 引入了`jthread`,具有自然的线程行为,包括协作式线程停止和自动汇合行为。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《现代 C++ 编程实战》
新⼈⾸单¥59
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部