std::monostate
来自 cppreference.com
定义在头文件 <variant> 中 |
||
struct monostate { }; |
(自 C++17 起) | |
单元类型,旨在用作 std::variant 中的行为良好的空替代方案。特别地,非默认可构造类型的变体可以将 std::monostate
列为其第一个替代方案:这使得变体本身成为默认可构造的。
内容 |
[编辑] 成员函数
(构造函数) (隐式声明) |
平凡的隐式默认/复制/移动构造函数 (公共成员函数) |
(析构函数) (隐式声明) |
平凡的隐式析构函数 (公共成员函数) |
operator= (隐式声明) |
平凡的隐式复制/移动赋值 (公共成员函数) |
[编辑] 非成员函数
std::operator==, !=, <, <=, >, >=, <=>(std::monostate)
constexpr bool operator==( monostate, monostate ) noexcept { return true; } |
(1) | (自 C++17 起) |
(2) | ||
constexpr bool operator!=( monostate, monostate ) noexcept { return false; } constexpr bool operator< ( monostate, monostate ) noexcept { return false; } |
(自 C++17 起) (直到 C++20) |
|
constexpr std::strong_ordering operator<=>( monostate, monostate ) noexcept { |
(自 C++20 起) | |
所有 std::monostate
实例比较相等。
|
(自 C++20 起) |
[编辑] 辅助类
std::hash<std::monostate>
template <> struct std::hash<monostate>; |
(自 C++17 起) | |
专门针对 std::monostate
的 std::hash 算法。
[编辑] 示例
运行此代码
#include <cassert> #include <iostream> #include <variant> struct S { S(int i) : i(i) {} int i; }; int main() { // Without the monostate type this declaration will fail. // This is because S is not default-constructible. std::variant<std::monostate, S> var; assert(var.index() == 0); try { std::get<S>(var); // throws! We need to assign a value } 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 对象(公共成员函数) |