-1

我已经编写了这样的代码,该代码适用std::move于临时构造函数中的纯右值。

  // a std::string instance in class Obj

  Obj&& myObj1 = std::move(Obj(1,"lost"));
  print(myObj1);

  Obj&& myObj2 = Obj(2,"keep");
  print(myObj2);

打印效果是这样的(print也在构造函数和析构函数中):

Construct lost
Destroy lost
obj1: 

Construct keep
obj2: keep
Destroy keep

stackoverflow中的一些问题说第一种情况应该没有影响,我想知道我的代码会发生什么。那是Obj(1, "lost")在函数中作为参数并在退出std::move时死亡吗?std::move

4

1 回答 1

0

std::move是一个函数调用;它不是 C++ 的神奇运算符。它所做的只是返回对给定对象的引用。它通过引用获取其参数。

在 C++ 中,如果您有一个纯右值,并将它传递给一个引用它的函数,则该纯右值创建的临时值将只持续到表达式结束。

所以move返回对临时的引用。myObj1但是那个临时的将在初始化后立即被销毁。myObj1对被破坏对象的引用也是如此。

于 2021-09-05T05:18:11.913 回答