繁体   English   中英

什么时候应该使用const&?

[英]When should I use const& to this?

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

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

它编译并运行。

我想知道在operator ==中对此进行引用(&)有什么好处(或缺点)。

正如TC在评论中指出的那样,其原因并非“仅接受左值”。 const引用绑定到右值就好了。

这是因为只有在所有重载都指定值类别的情况下,函数才能在隐式对象参数的值类别上重载。 也就是说,当您使用&&添加仅与右值匹配的重载时,除非您将&添加到现有重载中,否则它将不会编译。

在13.1中,规则的措词如下:

具有相同名称和相同parameter-type-list的成员函数声明以及具有相同名称,相同parameter-type-list和相同模板参数列表的成员函数模板声明(如果有)不能重载,但是并非全部,都有ref限定词

并举一个例子

 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 }; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM