方法声明中{&44}的&符号含义

时间:2016-08-03 14:14:25

标签: c++ methods reference qualifiers

我知道const限定符在方法声明中的含义(使*this const),但我无法理解这些行中的&符号意味着什么:

MyClass &operator =(const MyClass&) & = default;
//                                  ^- this one
bool operator ==(const MyClass &right) const &;
//                                 that one -^

decltype(*this)总是MyClass& / const MyClass&不是吗?那么&符号在这里意味着什么?

1 个答案:

答案 0 :(得分:3)

  
      
  1. 那么&符号在这里意味着什么?
  2.   

这意味着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
  
      
  1. 不是decltype(* this)总是MyClass& / const MyClass&?
  2.   

请注意,即使在rvalue ref-qualified函数中,bool operator ==(const MyClass &right) const &; bool operator ==(const MyClass &right) const &&; 的类型也不会改变。

  

注意:与cv-qualification不同,ref-qualification不会更改*this指针的属性:在rvalue ref-qualified函数中,this仍然是左值表达式。