现代 C++20 实战高手课
卢誉声
Autodesk 首席工程师
3781 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 29 讲
现代 C++20 实战高手课
15
15
1.0x
00:00/00:00
登录|注册

20|漫游C++23:更好的C++20

你好,我是卢誉声。
到现在为止,我们应该已经发现,C++20 这个版本的规模和 C++11 等同,甚至更加庞大。一方面,它变得更加现代、健壮和安全。另一方面,自然也存在很多不足之处。
因此,就像 C++14/17 改进、修复 C++11 那样,C++23 必然会进一步改进 C++20 中“遗留”的问题。令人高兴的是,C++23 标准已经于 22 年特性冻结。除了作为 C++20 的补丁,它还引入了大量新特性(主要是标准库部分),成为了一个至少中等规模的版本更新。
既然 C++23 的特性已经冻结,年底发布的正式标准最多只是标准文本的细节差异,现在正是一个了解 C++23 主要变更的好时机。
给你一点提示,现阶段各个编译器尚未针对 C++23 提供完善的支持。因此,对于这一讲涉及的代码,主要是讲解性质,暂时无法保证能够编译执行。
接下来,就让我们从语言特性变更、标准库变更两个角度,开始漫游 C++23 吧。

语言特性变更

C++23 的语言特性变更真的不多,不过即使如此,也有一些非常亮眼的特性变更,比如我们即将了解的几个新特性。

显式 this 参数

要明白这个语言特性变更,得先弄清楚什么是显式 this 参数。
让我们来看一下这段代码。
#include <iostream>
#include <cstdint>
class Counter {
public:
Counter(int32_t count) : _count(count) {}
Counter& increment(this Counter& self) {
self._count++;
return self;
}
template <typename Self>
auto& getCount(this Self& self) {
return self._count;
}
private:
int32_t _count;
};
int main() {
Counter counter(10);
std::cout << counter.getCount() << std::endl;
counter.increment().increment();
std::cout << counter.getCount() << std::endl;
const Counter& counterRef = counter;
std::cout << counterRef.getCount() << std::endl;
return 0;
}
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

C++23标准的发布将带来许多令人振奋的新特性和标准库变更。其中,引人注目的语言特性变更包括显式this参数和多元operator[],为编码习惯带来较大变化。此外,C++23引入了名为std的标准Module,使得使用标准库更加方便。另一个重要变化是引入了expected类型,并通过Monadic interfaces实现新的异常处理风格,这是仿照Rust等语言的做法。此外,对Ranges的补充增加了大量支持,包括适配器和视图管道的使用,以及一个实用的转换函数to,允许将视图转换成任意类型的标准容器。C++23还引入了mdspan作为多维数组视图,解决了多维数组支持不足的问题。另外,新增的print和println函数使得文本格式化输出更加便捷,而堆栈跟踪库则弥补了异常处理能力的不足,使得程序开发更加便利。总之,C++23标准的变化将为开发者带来更多便利和新的编程范式,让我们拭目以待,期待C++23的正式发布。

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

精选留言

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