标准是否对从基本数据类型转移有任何保证?
int i = 42;
int j = std::move(i);
// what can we say about i here?
合理的选择是保持移动的值不变或将其设置为零?
显然,上面的代码本身没什么意义,但想想模板。
答案 0 :(得分:2)
内置=
运算符在用作a = b
时,具有良好记录的长期行为,即读取b
的值,并将其存储在a
中}。标准中没有任何内容表明整数赋值会修改赋值RHS。
5.17分配和复合赋值运算符[expr.ass]
...
2在简单赋值(
=
)中,表达式的值将替换左操作数引用的对象的值。
没有任何关于更改任何其他对象的任何值的说法,因此不得更改其他对象的值。
重载的自定义operator=
实现可能表现不同,并且许多标准库类型确实使其行为不同,但这不会影响为语言的内置=
运算符提供的保证。 / p>
答案 1 :(得分:1)
POD不会真正移动,他们会复制(或者,他们的复制和移动是相同的操作,因为在这种情况下没有真正的"移动" - 请参阅{{3} }。