如标题。最近在看现代 cpp ,感觉右值和右值引用这两个概念非常重要,因此自己尝试构建一些例子来加深理解。例子如下:
#include <iostream>
#include <ostream>
#include <utility>
using namespace std;
struct C {
int a = 1;
C() { cout << "Ha ha" << endl; }
C(C& c) : a(c.a) { cout << "Copy" << endl; }
C(C&& c) : a(std::move(c.a)) { cout << "Move" << endl; }
~C() { cout << "Fucked" << endl; }
};
C func() {
C shit;
cout << &shit << endl;
return shit;
}
C f2() {
C&& shit = func();
cout << &shit << endl;
return shit;
}
C f3() {
C&& shit = func();
cout << &shit << endl;
return std::move(shit);
}
int main() {
auto&& shit = f2();
// Ha ha
// 0x5ffe24
// 0x5ffe24
// Copy
// Fucked
cout << &shit << endl;
// 0x5ffe7c
cout << "*************" << endl;
auto shit2 = f3();
cout << &shit2 << endl;
// Ha ha
// 0x5ffe24
// 0x5ffe24
// Move
// Fucked
// 0x5ffe78
cout << "*************" << endl;
auto&& shit3 = f3();
cout << &shit3 << endl;
// Ha ha
// 0x5ffe24
// 0x5ffe24
// Move
// Fucked
// 0x5ffe74
cout << "*************" << endl;
// cout << shit.a;
}
对于这个例子所产生的结果,我不是很懂,我主要是不太懂以下几个问题:
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.