gpt4 book ai didi

c++ - std::optional:simple 和 ref-qualified value() 之间的有效区别

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:51 25 4
gpt4 key购买 nike

这是一个学术问题。 std::optional<T>类型有一个 T && value() &&方法。我有以下定义:

class A { ... };
void f(A &&a);

以及以下程序:

std::optional<A> optA;
optA = A(1337);
f(std::move(optA).value()); // OPTION 1
f(std::move(optA.value())); // OPTION 2
std::cout << optA.has_value() << std::endl;

选项 1 和选项 2 之间有什么有意义的区别吗?对于选项 1,我会有 1 , 0或未指定为输出?根据我的测试,has_value() 在这两种情况下都保持为真。

有没有可能的情况value() &&std::move产生影响和 value()

最佳答案

std::move(optA).value() 之间没有区别和 std::move(optA.value()) . value()只返回一个引用包含值的 glvalue,或者你可以有 value()返回一个左值,然后通过 std::move 将其转换为一个亡值, 或者您可以调用 std::move首先有value()立即给你一个 xvalue(实际上,从 lvalue 到 xvalue 的转换将发生在 value() 方法本身的某个地方)。引用限定的重载在这个简单的例子中显然不是很有用,但是当可选的通过转发引用传递时会很有用 O&& o ,你想要 std::forward<O>(o).value() “做正确的事”。

关于c++ - std::optional:simple 和 ref-qualified value() 之间的有效区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56671989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com