某些场景中,我们可能需要限制调用成员函数的对象的类型(左值还是右值),为此 C++11 新添加了引用限定符。所谓引用限定符,就是在成员函数的后面添加 “&” 或者 “&&”,从而限制调用者的类型(左值还是右值)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include <iostream> using namespace std; class demo { public: demo(int num) : num(num) {} int get_num_l() & { return this->num; }
int get_num_r() && { return this->num; }
private: int num; };
int main() { demo a(10); cout << a.get_num_l() << endl;
cout << move(a).get_num_r() << endl; return 0; }
|
const和引用限定符
C++11 标准规定,当引用限定符和 const 修饰同一个类的成员函数时,const 必须位于引用限定符前面。
当 const && 修饰类的成员函数时,调用它的对象只能是右值对象;当 const & 修饰类的成员函数时,调用它的对象既可以是左值对象,也可以是右值对象。无论是 const && 还是 const & 限定的成员函数,内部都不允许对当前对象做修改操作。
1 2 3 4 5 6 7 8 9
| int get_num() const &{ return this->num; }
int get_num2() const && { return this->num2; }
|