尾随常量&或者&&关于功能声明

时间:2013-09-05 04:02:13

标签: c++ c++11

我正在查看cppreferencestd::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&之间的区别是什么?

1 个答案:

答案 0 :(得分:3)

函数后面的放大器意味着this必须是左值,相反双偶符号意味着它必须是一个rval,const只是说它是一个不可修改的lval或rval

因此,使用&限定的函数仅适用于可修改的lval,如果使用&&限定,则仅适用于rval。我认为const &&确实没有意义,因为const &可以绑定到临时值,因此const限定符只对lval做任何事情。