【发布时间】:2020-01-01 21:42:42
【问题描述】:
std::variant 可以进入一个名为“valueless by exception”的状态。
据我了解,造成这种情况的常见原因是移动分配引发了异常。变体的旧值不再保证存在,预期的新值也不再存在。
std::optional,然而,没有这样的状态。 cppreference 提出了大胆的主张:
如果抛出异常,*this ...的初始化状态不变,即如果对象包含值,它仍然包含值,反之亦然。
std::optional 如何避免成为“异常无价值”,而std::variant 则不然?
【问题讨论】:
标签: c++ c++17 stdoptional std-variant