这是一个学术问题。该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 之间有什么有意义的区别吗?对于 OPTION 1,我将有1
,0
还是未指定作为输出?根据我的测试,has_value() 在这两种情况下都是正确的。
是否有任何可能的情况value() &&
使std::move
和有所不同value()
?