std::variant<Types...>::valueless_by_exception

< cpp‎ | utility‎ | variant
 
 
工具库
通用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中弃用)
整数比较函数
(C++20)
swap 与类型运算
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
常用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++17)

初等字符串转换
(C++17)
(C++17)
 
 
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_nposgetvisit 抛出 bad_variant_access