我知道const
限定符在方法声明中的含义(使*this
const),但我无法理解这些行中的&符号意味着什么:
MyClass &operator =(const MyClass&) & = default;
// ^- this one
bool operator ==(const MyClass &right) const &;
// that one -^
decltype(*this)
总是MyClass&
/ const MyClass&
不是吗?那么&符号在这里意味着什么?
答案 0 :(得分:3)
- 那么&符号在这里意味着什么?
醇>
这意味着ref-qualified member functions:
非静态成员函数可以使用左值ref-qualifier(函数名后面的标记&)或rvalue ref-qualifier(标记&&函数名后面)声明。在重载解析期间,类X的非静态cv限定成员函数被视为一个函数,如果它没有ref-qualifiers或者它具有lvalue ref-qualifier,则将类型为lvalue的隐式参数引用到cv-qualified X 。否则(如果它有rvalue ref-qualifier),它被视为一个函数,它采用类型为rvalue的隐式参数来引用cv-qualified X。
您可以定义两个(左值/右值ref-qualifier),并且将通过重载决策来选择适当的值。如:
$key = (int)(round($number) + 0.0000000000000000001) // number of zeros chosen arbitrarily
- 不是decltype(* this)总是MyClass& / const MyClass&?
醇>
请注意,即使在rvalue ref-qualified函数中,bool operator ==(const MyClass &right) const &;
bool operator ==(const MyClass &right) const &&;
的类型也不会改变。
注意:与cv-qualification不同,ref-qualification不会更改
*this
指针的属性:在rvalue ref-qualified函数中,this
仍然是左值表达式。