从 std::optional 中提取价值
Take value out of std::optional
你实际上是如何从 optional 中取出一个值的?意思是获取 std::optional
中的值的所有权并将其替换为 std::nullopt
(或将其替换为另一个值)?
例如,在 Rust 中,您可以 .unwrap
您的 Option
或做类似 foo.take().unwrap()
的事情。我正在尝试用 C++ optional
s.
做类似的事情
operator*
/value()
return是对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);
这将调用 optional,
的 operator*()
的右值引用重载,其中 return 是对包含值的右值引用。
也可以直接对左值optional
的operator*()
的return值执行std::move
,将包含值的左值引用转换为右值
auto taken = std::move(*opt);
C++ 中替换值和 return 旧值的标准方法,如 Rust 中的 mem::replace
,是 std::exchange
.
所以:
std::exchange(o, std::nullopt).value();
你实际上是如何从 optional 中取出一个值的?意思是获取 std::optional
中的值的所有权并将其替换为 std::nullopt
(或将其替换为另一个值)?
例如,在 Rust 中,您可以 .unwrap
您的 Option
或做类似 foo.take().unwrap()
的事情。我正在尝试用 C++ optional
s.
operator*
/value()
return是对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);
这将调用 optional,
的 operator*()
的右值引用重载,其中 return 是对包含值的右值引用。
也可以直接对左值optional
的operator*()
的return值执行std::move
,将包含值的左值引用转换为右值
auto taken = std::move(*opt);
C++ 中替换值和 return 旧值的标准方法,如 Rust 中的 mem::replace
,是 std::exchange
.
所以:
std::exchange(o, std::nullopt).value();