dvi*_*ino 8 c++ const reference this
我发现了一些这样的代码:
class foo{
int a;
public:
foo(int v) : a{v} {}
bool operator==(const foo& rhs) const&{
return (rhs.a == a);
}
};
Run Code Online (Sandbox Code Playgroud)
它编译并运行.
我想知道在运算符==中对此引用(&)有什么好处(或缺点).
正如 TC 在评论中指出的那样,这样做的原因不是“只接受左值”。 const引用可以很好地绑定到右值。
其原因是,仅当所有重载都指定值类别时,才可以在隐式对象参数的值类别上重载函数。也就是说,当您添加仅匹配右值的重载时,除非您添加到现有重载&&,否则它不会编译。&
在 13.1 中,规则的措辞如下:
具有相同名称和相同 参数类型列表的 成员函数声明以及具有相同名称、相同参数类型列表和相同模板参数列表的成员函数模板声明,如果其中有任何一个都不能被重载,但是不是全部,有一个ref-qualifier。
并给出了一个例子
Run Code Online (Sandbox Code Playgroud)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 };