从 std::Optional 中获取值

Sil*_*ash 14 c++ option-type c++17 stdoptional

实际上如何从可选项中获取值?意思是取得 中的值的所有权std::optional并将其替换为std::nullopt(或将其交换为另一个值)?

例如,在 Rust 中,您可以.unwrap执行Option或执行类似的操作foo.take().unwrap()。我正在尝试用 C++ 做类似的事情optional

康桓瑋*_*康桓瑋 12

operator*/value()返回对 所持有值的引用optional,因此您可以简单地使用std::move将其移动到临时变量

std::optional<std::string> opt = "abc";
// "take" the contained value by calling operator* on a rvalue to optional
auto taken = *std::move(opt);
Run Code Online (Sandbox Code Playgroud)

这将调用 的右值引用重载operator*(),它optional,返回对所包含值的右值引用。

您还可以直接对左值std::move的返回值执行操作,这会将所包含值的左值引用转换为右值operator*()optional

auto taken = std::move(*opt);
Run Code Online (Sandbox Code Playgroud)

  • 此后“opt”仍然包含(移出)值。理想情况下,您应该跟进`.reset()`。另外,切线,但 `*std::move(opt)` 和 `std::move(*opt)` 是等效的。 (7认同)