8

我正在查看std::optional<T>cppreferenceAPI 。我很好奇如何value_or工作。看那里,似乎有两个重载:

template< class U > 
constexpr T value_or( U&& value ) const&;

template< class U > 
T value_or( U&& value ) &&;

const&函数声明和&&尾随是什么?const将函数声明为和将其声明为有什么区别const&

4

1 回答 1

4

函数后面的this& 表示它必须是左值,相反,双 & 表示它必须是 rval,const 只是表示它是不可修改的 lval 或 rval

因此,限定为的函数&仅适用于可修改的 lval,如果限定为&&仅适用于 rval。我猜 aconst &&真的没有意义,因为 aconst &可以绑定到一个临时的,所以 const 限定符只为 lval 做任何事情。

于 2013-09-05T04:06:10.810 回答