【问题标题】:Trailing const& or && on function declaration [duplicate]函数声明上的尾随 const& 或 && [重复]
【发布时间】:2013-09-08 18:27:16
【问题描述】:

我在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&amp;&amp;&amp; 是什么?将函数声明为 const 和声明为 const&amp; 有什么区别?

【问题讨论】:

  • 这实际上是编译器最近获得支持的 C++11 功能。
  • @chris 干杯。我知道对 *this 的右值引用,但由于它可能是最后要实现的功能之一,所以我根本没有费心去研究它们。
  • @chris 老实说,我一直在等待回答这个问题,不久前我在 c++ 入门中看到了答案,太糟糕了,我从来没有意识到这是一个骗局:(

标签: c++ c++11


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-03-09
    • 2012-05-09
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多