1 1.左值引用(T&), 只能绑定左值
2 2.右值引用(T&&)只能绑右值
3 生命周期只有一行(有名字之后,编译器认为是左值)
4 3.常量左值 左值右值都能绑定
5 4.已命名的右值引用(左值)
6
7 test code:
8
9 class A
10 {
11 public:
12 A();
13 ~A();
14 A(const A&);
15 A(A&&);
16 A operator=(const A& a);
17 A operator=(const A&& a);
18 int val{23};
19 };
20
21 int main()
22 {
23 A a;
24 cout << "call:" << endl;
25 A& tmp = a;
26 func_val(tmp);
27 //右值-> 对象
28 func_val(std::move(a));
29 cout << "-------------" << endl;
30 //直接传引用
31 func_refer(tmp);
32 //右值引用 -> 常引用
33 func_refer(std::move(tmp));
34 cout << "-------------" << endl;
35 // 右值
36 func_rval(std::move(tmp));
37 A&& atmp = std::move(tmp);
38 //func_rval(atmp);
39 cout << "-------------" << endl;
40
41 A aa = tmp;//拷贝构造函数
42 //aa = tmp;
43 A&& arval = std::move(tmp);
44 A ad = std::move(tmp);
45 A ad1 = arval;
46 //赋值函数
47 ad = arval;
48 //移动赋值函数
49 ad = std::move(tmp);
50 A ta;
51 A tt = std::move(ta);
52 std::string m = "abc";
53 std::string && ma = std::move(m);
54 std::string mm = ma;
55
56 return 0;
57 }