该标准是否对从基本类型转移有任何保证?

时间:2014-11-24 22:41:41

标签: c++ c++11 move move-semantics

标准是否对从基本数据类型转移有任何保证?

int i = 42;
int j = std::move(i);
// what can we say about i here?

合理的选择是保持移动的值不变或将其设置为零?

显然,上面的代码本身没什么意义,但想想模板。

2 个答案:

答案 0 :(得分:2)

内置=运算符在用作a = b时,具有良好记录的长期行为,即读取b的值,并将其存储在a中}。标准中没有任何内容表明整数赋值会修改赋值RHS。

  

5.17分配和复合赋值运算符[expr.ass]

     

...

     

2在简单赋值(=)中,表达式的值将替换左操作数引用的对象的值。

没有任何关于更改任何其他对象的任何值的说法,因此不得更改其他对象的值。

重载的自定义operator=实现可能表现不同,并且许多标准库类型确实使其行为不同,但这不会影响为语言的内置=运算符提供的保证。 / p>

答案 1 :(得分:1)

POD不会真正移动,他们会复制(或者,他们的复制和移动是相同的操作,因为在这种情况下没有真正的"移动" - 请参阅{{3} }。