引用限定符
- 引用限定符;可以在参数列表之后使用引用限定符来指定
this
对象的左值与右值属性;- 若引用限定符为
&
,则表明this
对象指向着左值对象; - 若引用限定符为
&&
,则表明this
对象指向着右值对象.
struct X { void foo() &; void foo() &&; };
- 若引用限定符为
-
引用限定符有哪些限定;
-
限定了
this
的左值/右值属性;若引用限定符为&
,则表明该成员函数只需要左值对象调用;若为&&
,则表明只需要右值对象调用.如:struct X { void foo() && {} }; // 编译器会提示 error: passing ‘X’ as ‘this’ argument discards qualifiers [-fpermissive] X x; x.foo();
struct X { void foo() & {} }; // 编译器也会提示 passing ‘X’ as ‘this’ argument discards qualifiers X().foo();
-
重载;编译器会在以左值对象调用成员函数时调用
&
限定版本.在以右值对象来调用成员函数时调 用&&
版本.struct X { void foo() & {} // 1 void foo() && {}// 2 }; X x; x.foo(); // 调用 foo1(), X().foo(); // 调用 foo2();
-
-
引用限定符语法点:
- 引用限定符必须同时出现在声明以及实现之后.
-
引用限定符必须出现在’const限定符’之后;如:
struct X { void foo() const &; // 正确. void bar() & const; // 错误! };
- 若引用限定符用于重载;则所有同名函数要么都带有引用限定符;要么都不带有引用限定符;不然会编 译出错.
参考
- C++Primer5