移动语义和右值引用

c++98 和 c++11 对这段代码的处理不同

1
2
3
4
5
6
7
8
#include <string>
using namespace std;

void foo()
{
string name = "world";
string result = string("Hello, ") + name + ".";
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <utility>
class Obj
{
public:
void work()
{

}
};
Obj bad_move()
{
Obj obj;
// move 会禁止 NRVO
return std::move(obj);
}
Obj good_move()
{
Obj obj;
return obj;
}
void foo()
{
Obj obj1 = bad_move();
Obj obj2 = good_move();
obj1.work();
obj2.work();
}

http://example.com/2024/04/14/现代cpp实战/03/readme/
作者
WHC
发布于
2024年4月14日
许可协议