C++20加入的一些有很大帮助的东西

【模块】

代码组织起来更方便,不用为头文件的包含顺序头痛。

隐藏内部细节更方便,特别是隐藏模板的内部细节成为可能。以前只能通过cpp文件和匿名命名空间namespace{}隐藏常规函数和常规类的内部细节,但模板函数和模板类由于必须在头文件中实现,因此无法隐藏内部细节。

特别是为了异常安全而必须写一堆RAII类的时候,不隐藏的话就会公开给使用者一堆与意图无关的RAII类,隐藏的话又没办法使用模板,表现力大大降低。使用C++20的模块系统,就不用把写的类都公开出去了。

【协程】

不用再把异步过程切分到一个一个的回调中去了。对于编写循环等待的单线程异步程序非常友好。

【概念和约束】

让人秃头的模板元编程和SFINAE终于可以退居二线了。

【char8_t】

char8_t为定义UTF-8的API提供了方便,主要对跨平台编程帮助很大。可实现在Windows下支持Unicode,同时在Linux下zero-overhead。

可定义参数为const char8_t*、const u8string&、u8string_view,在Windows下使用MultiByteToWideChar转换后调用WinAPI,在Linux下直接reinterpret_cast<const char*>调用glibc函数。

【operator<=>】

自动生成比较运算符,无论如何都听起来非常有吸引力。

【指派初始化】

填某些不需要填所有成员的以及带union的结构体终于省事了。写过Win32、DirectX或Vulkan的估计对这个问题深有体会。C99就有的东西,C++20居然才引进。

发布了29 篇原创文章 · 获赞 1 · 访问量 3396

猜你喜欢

转载自blog.csdn.net/defrag257/article/details/103896892