std::monostate 的意义是什么?你无法对它做任何事情! - The Old New Thing

主要观点:

  • C++17 引入了std::monostate,用于表示协程不产生结果的占位符。
  • std::monostate是一个不做任何事的虚类型,所有实例相互相等,在libcxxlibstdc++stl中都有定义。
  • 不用std::monostate是因为想做某事,使用它是因为不想做某事,其最初目的是作为std::variant的初始类型,允许其在空状态下默认构造。
  • std::variant中,插入std::monostate可添加“空”状态,节省创建std::optional<std::variant<...>>的麻烦,可将其视为“空”状态,在使用中它充当void的虚类型。

关键信息:

  • std::monostate的作用及用途。
  • std::variant中的应用及意义。
  • 相关代码示例及不同库中的实现位置。

重要细节:

  • std::monostate无成员和非平凡成员函数。
  • 举例说明了WidgetPortListener的构造函数情况,以及std::variant默认构造的问题,引入std::monostate解决。
  • 提到std::variant已有“空”状态valueless_by_exceptionstd::monostate是另一种“空”状态。
  • 提及相关阅读Regular Void已停滞。
  • 作者 Raymond Chen 参与 Windows 发展 30 多年,其网站及相关书籍情况,偶尔在 Windows Dev Docs Twitter 账户上讲故事。
阅读 10
0 条评论