我正在查看cppreference上std::optional<T>
的API。我很好奇value_or
如何运作。看那里,似乎有两个重载:
template< class U >
constexpr T value_or( U&& value ) const&;
template< class U >
T value_or( U&& value ) &&;
函数声明后面的const&
和&&
是什么?将函数声明为const
并将其声明为const&
之间的区别是什么?
答案 0 :(得分:3)
函数后面的放大器意味着this
必须是左值,相反双偶符号意味着它必须是一个rval,const只是说它是一个不可修改的lval或rval
因此,使用&
限定的函数仅适用于可修改的lval,如果使用&&
限定,则仅适用于rval。我认为const &&
确实没有意义,因为const &
可以绑定到临时值,因此const限定符只对lval做任何事情。