[英]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.