从std ::可选
您实际上如何从可选的价值中获取价值?意思是将std ::可选
内的值的所有权替换为std :: nullopt
(或与其他值交换)?
例如,在Rust中,您可以.unwrap
您的option
或执行foo.take()。unwrap()
之类的事情。我正在尝试使用C ++ 可选
s进行类似的事情。
How do you actually take a value out of optional? Meaning take ownership of the value inside the std::optional
and replace it with std::nullopt
(or swap it with another value)?
In Rust for example you could .unwrap
your Option
or do something like foo.take().unwrap()
. I'm trying to do something like that with C++ optional
s.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
operator*
/code>/value> value()
返回对
可选
持有的值的引用,因此您可以简单地使用std ::移动
将其移至临时变量,这将调用
operator*()
可选的RVALUE参考过载,,返回对包含值的RVALUE参考。您还可以在
operator*()
lvalue可选
的返回值上直接执行std ::移动
,它将转换LVALUE将包含的值引用为rvalueoperator*
/value()
returns a reference to the value held by theoptional
, so you can simply usestd::move
to move it to a temporary variableThis will invoke the rvalue reference overload of
operator*()
of theoptional,
which returns an rvalue reference to the contained value.You can also directly perform
std::move
on the return value of theoperator*()
of the lvalueoptional
, which will convert the lvalue reference of the contained value into an rvalueC ++替换值并返回旧的标准方法,例如
mem :: Rust中的
,是std :: Exchange
。因此:
https://godbolt.org/z/g7fak9rxj
The standard way in C++ to replace a value and return the old, like
mem::replace
in Rust, isstd::exchange
.So:
https://godbolt.org/z/G7faK9rxj