std::optional::value()
有以下两个重载
constexpr T& value() &;
constexpr const T & value() const &;
constexpr T&& value() &&;
constexpr const T&& value() const &&;
返回 const 右值引用有什么意义?
我能想到的唯一原因是使编译器能够在(真的很奇怪)情况下帮助捕获未定义的行为,如下所示
auto r = std::cref(const_cast<const std::optional<int>&&>(
std::optional<int>{}).value());
如果std::optional::value()
已经返回 aconst T&
那么上面的代码将编译并在以后使用时会导致未定义的行为r
reference_wrapper
。
上面返回 a 是否还有其他极端情况const T&&
?