主要观点:
- C++17 引入了
std::monostate
,用于表示协程不产生结果的占位符。 std::monostate
是一个不做任何事的虚类型,所有实例相互相等,在libcxx
、libstdc++
和stl
中都有定义。- 不用
std::monostate
是因为想做某事,使用它是因为不想做某事,其最初目的是作为std::variant
的初始类型,允许其在空状态下默认构造。 - 在
std::variant
中,插入std::monostate
可添加“空”状态,节省创建std::optional<std::variant<...>>
的麻烦,可将其视为“空”状态,在使用中它充当void
的虚类型。
关键信息:
std::monostate
的作用及用途。- 在
std::variant
中的应用及意义。 - 相关代码示例及不同库中的实现位置。
重要细节:
std::monostate
无成员和非平凡成员函数。- 举例说明了
Widget
和PortListener
的构造函数情况,以及std::variant
默认构造的问题,引入std::monostate
解决。 - 提到
std::variant
已有“空”状态valueless_by_exception
,std::monostate
是另一种“空”状态。 - 提及相关阅读Regular Void已停滞。
- 作者 Raymond Chen 参与 Windows 发展 30 多年,其网站及相关书籍情况,偶尔在 Windows Dev Docs Twitter 账户上讲故事。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。