在同一赋值表达式中使用std :: move(object)和object.method().

nic*_*yte 6 c++ move-semantics

以下表达式的结果是否定义明确?它是什么?

hash_map[object.key()] = std::move(object);

我不确定std::move零件的影响是否会在零件之前或之后发生object.key(),因此我的问题.

ixS*_*Sci 5

它定义得很好,因为这段代码中的第一个并不重要:您可以将其重写为以下等价物

hash_map[object.key()] = static_cast<objecttype&&>(object);
Run Code Online (Sandbox Code Playgroud)

我们可以对代码说些什么:

  1. object.key() 应该在分配到地图之前执行
  2. std::move(object) 应该在分配到地图之前执行

然后将对地图进行赋值,该函数将接受xvalued object以及key函数所做的任何更改.