我什么时候应该使用const&这个?

时间:2015-03-15 02:52:48

标签: c++ reference const this

我发现了一些像这样的代码:

class foo{
    int a;
public:
    foo(int v) : a{v} {}
    bool operator==(const foo& rhs) const&{
        return (rhs.a == a);
    }
};

它编译并运行。

我想知道在运算符中使用引用(&)有什么好处(或缺点)==。

1 个答案:

答案 0 :(得分:4)

作为T.C.一直在评论中指出,这个原因并不是只接受左值"。 const引用绑定到rvalues就好了。

原因是只有当ALL重载指定了值类别时,才能在隐式对象参数的值类别上重载函数。也就是说,当你添加一个仅与rvalues匹配的&&的重载时,除非你将&添加到现有的重载中,否则它不会编译。

在13.1中,这是规则的措辞:

  

具有相同名称和相同 parameter-type-list 的成员函数声明以及具有相同名称的成员函数模板声明,相同的 parameter-type-list ,同样的   如果模板参数列表中的任何一个(但不是全部)具有 ref-qualifier ,则不能重载模板参数列表。

并举一个例子

class  Y
{
   void  h()  &;
   void  h()  const  &;        // OK
   void  h()  &&;              // OK, all declarations have a ref-qualifier
   void  i()  &;
   void  i()  const;           // ill-formed, prior declaration of  i
                               // has a ref-qualifier
};