【发布时间】:2015-03-09 10:41:00
【问题描述】:
- 在该示例中,默认副本和 std::move 有什么区别?
-
move之后的对象,新旧对象之间是否存在依赖关系?
int main () {
int a = 100;
std::cout<<&a<<std::endl;
auto a_copy = a; // deduced as int
std::cout<<&a_copy<<std::endl;
auto a_move = std::move(a); // deduced as int
std::cout<<&a_move<<std::endl;
};
输出:
0x7fffffffe094
0x7fffffffe098
0x7fffffffe09c
【问题讨论】:
-
请注意
std::move实际上并没有移动任何东西。它只是对右值 ref 执行强制转换,结果是一个右值,而简单地命名a则不是。这两个事实是提供一个移动对象的一部分,但实际上并不是从它移动的东西。因此,询问“move之后”是一个转移话题。
标签: c++ c++11 move-semantics