std::variant<Types...>::valueless_by_exception
来自cppreference.com
constexpr bool valueless_by_exception() const noexcept; |
(C++17 起) | |
当且仅当 variant
保有值时返回 false
。
注意
variant
可以在下列情形中变得无值:
- (保证)在复制赋值中,从临时量移动初始化所含值期间抛出异常
- (保证)在移动赋值中,移动初始化所含值时抛出异常
- (可选)在类型更改赋值期间,初始化所含值时抛出异常
- (可选)在类型更改 emplace 期间,初始化所含值时抛出异常
因为 variant
决不容许分配动态内存,故在这些情况下不可能保留先前的值。
这还应用到非类类型的 variant
:
struct S { operator int() { throw 42; } }; variant<float, int> v{12.f}; // OK v.emplace<1>(S()); // v 可能为无值
因异常无值的 variant
被当做在非法态: index 返回 variant_npos , get 与 visit 抛出 bad_variant_access 。