【发布时间】:2021-11-02 17:21:07
【问题描述】:
我已经编写了这样的代码,将std::move 应用于来自临时构造函数的prvalue。
// 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 中的一些问题说第一种情况应该没有影响,我想知道我的代码会发生什么。那是std::move 函数中的Obj(1, "lost") 作为参数并在std::move 退出时死亡吗?
【问题讨论】:
-
Obj(1,"lost")是一个右值。std::move会将其转换为右值,因此它实际上是无操作的。请发minimal reproducible example。 -
@Enlico 对不起,我已经阅读了该页面并模仿了其他帖子,在这种情况下是否意味着我应该提供一个最小的可编译代码而不是遗漏细节?
-
您的代码不能按原样使用。使其可以复制、粘贴、编译和运行。
标签: c++ move-semantics rvalue-reference rvalue stdmove