C++11 ref-qualifiers

【1】右值和左值引用成员函数

【2】应用示例

简单的示例程序如下:

 1 #include <iostream>
 2 
 3 struct Test
 4 {
 5     // can be invoked on lvalue
 6     void f() &;
 7 
 8     // can be invoked on rvalue
 9     void f() &&;
10 
11     // can be invoked on const lvalue
12     void f() const &;
13 
14     // can be invoked on const rvalue
15     void f() const &&;
16 };
17 
18 void Test::f() &
19 {
20     std::cout << "f() &" << std::endl;
21 }
22 
23 void Test::f() &&
24 {
25     std::cout << "f() &&" << std::endl;
26 }
27 
28 void Test::f() const&
29 {
30     std::cout << "f() const &" << std::endl;
31 }
32 
33 void Test::f() const &&
34 {
35     std::cout << "f() const &&" << std::endl;
36 }
37 
38 int main()
39 {
40     Test genObj;
41 
42     genObj.f();
43     // invokes the first function
44     // because genObj is a named object, hence lvalue
45 
46     Test().f();
47     // invokes the second function 
48     // because Test() is an unnamed object, hence rvalue
49 
50     const Test conObj;
51 
52     conObj.f();
53     // invokes the three function
54     // because genObj is a const named object, hence lvalue
55 
56     const Test().f();
57     // invokes the four function 
58     // because const Test() is an const unnamed object, hence rvalue
59 
60     system("pause");
61 }
62 
63 /*
64 f() &
65 f() &&
66 f() const &
67 f() const &&
68 请按任意键继续. . .
69 */

注意:

(1)与const成员函数中的const一样,引用符&作用是限定this指针。

(2)必须同时出现在声明和定义中。

(3)&和&&分别用来限定this指针指向的是左值还是右值。

(4)成员函数参数列表后既有const又有引用限定符的话,引用限定符必须在const限定符后面。

(5)引用限定符修饰的成员函数也算重载范畴的。

 

good good study, day day up.

顺序 选择 循环 总结

posted @ 2020-03-16 00:12  kaizenly  阅读(556)  评论(0编辑  收藏  举报
打赏