该标准是否提供了有关从基本类型迁移的任何保证

Does the standard give any guarantees about moving from fundamental types?

本文关键字:类型 迁移 任何保 是否 标准      更新时间:2023-10-16

标准是否保证从基本数据类型迁移?

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

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

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

内置的

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

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

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

没有提到更改任何其他对象的任何值,因此不得更改其他对象的值。

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

POD 并没有真正移动,它们会复制

(或者,它们的复制和移动是相同的操作,因为在这种情况下没有什么可以真正"移动"的) - 见这里。