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

Using std::move(object) and object.method() in the same assignment expression.

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

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

我不确定 std::move 部分的效果是在 object.key() 部分之前还是之后发生,因此我的问题。

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

hash_map[object.key()] = static_cast<objecttype&&>(object);

关于代码我们能说些什么:

  1. object.key() 应该在分配给 map
  2. 之前执行
  3. std::move(object) 应该在分配给 map
  4. 之前执行

然后将分配给地图,它将接受 xvalued object 以及 key 函数所做的任何更改。