yang131

导航

右值引用

 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 }

 

posted on 2021-02-04 14:00  NoNight  阅读(66)  评论(0编辑  收藏  举报