c++ - 在函数声明中尾随 const& 或 &&

标签 c++ c++11

<分区>

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

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

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

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

最佳答案

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

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

关于c++ - 在函数声明中尾随 const& 或 &&,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18627535/

相关文章:

c++ - OpenCV cpp 运动检测

c++ - 函数模板参数

c++ - 在模板函数参数之间强制执行所需的关系

c++ - 两个 std::atomic 可以成为一个 union 的一部分吗?

c++ - "candidate template ignored: substitution failure:"编译错误?

c++ - 混合 C/C++ 库

来自类的c++第二个函数无法访问第一个

c++ - strlen() 编译时优化

c++ - 封装 std::vector 以允许迭代但没有别的

c++ -/usr/bin/ld : crtbegin. o: 没有那个文件: 没有那个文件或目录