std::monostate
来自cppreference.com
| 在标头 <variant> 定义
|
||
| 在标头 <utility> 定义
|
(C++26 起) |
|
| |
(C++17 起) | |
有意作为 std::variant 中的行为良好的空可选项的单位类型。具体而言,非可默认构造的变体类型可以把 std::monostate 列为其首个可选项:这使得此变体自身可默认构造。
成员函数
(构造函数) (隐式声明) |
平凡隐式默认/复制/移动构造函数 (公开成员函数) |
(析构函数) (隐式声明) |
平凡隐式析构函数 (公开成员函数) |
operator= (隐式声明) |
平凡隐式复制/移动赋值 (公开成员函数) |
非成员函数
std::operator==, !=, <, <=, >, >=, <=>(std::monostate)
| |
(1) | (C++17 起) |
| (2) | ||
| (C++17 起) (C++20 前) |
||
| |
(C++20 起) | |
所有 std::monostate 实例比较相等。
|
|
(C++20 起) |
辅助类
std::hash<std::monostate>
| |
(C++17 起) | |
为 std::monostate 特化 std::hash 算法。
示例
运行此代码
#include <cassert>
#include <iostream>
#include <variant>
struct S
{
S(int i) : i(i) {}
int i;
};
int main()
{
// 若无 monostate 类型则此声明将失败。
// 这是因为 S 不可默认构造。
std::variant<std::monostate, S> var;
assert(var.index() == 0);
try
{
std::get<S>(var); // 将抛异常!我们需要先赋一个值
}
catch(const std::bad_variant_access& e)
{
std::cout << e.what() << '\n';
}
var = 42;
std::cout << "std::get: " << std::get<S>(var).i << '\n'
<< "std::hash: " << std::hex << std::showbase
<< std::hash<std::monostate>{}(std::monostate{}) << '\n';
}
可能的输出:
std::get: wrong index for variant
std::get: 42
std::hash: 0xffffffffffffe19f
参阅
构造 variant 对象 (公开成员函数) |