将 c-tor 移动到带有按值参数的函数的局部变量的移动

问题描述

试图澄清我对何时发生移动的理解,以及何时最好编写按值而不是引用传递值函数以从移动中获益。

void foo()
{
  std::string localStr;
//
  foo1(localStr);
}
void foo1(const std::string str)
{

}

在这种情况下,localStr 会被移动到 foo1 中吗?

如果再添加一层函数调用

void foo()
{
  std::string localStr;
//
  foo1(localStr);
  //localStrisn't used anymore
}
void foo1(const std::string str)
{
   foo2(str);
   //str isn't used anymore
}
void foo2(const std::string str)
{
}

会不会有两个动作?

解决方法

您按值传递 str 的副本。它没有被移动。如果您使用指针或引用,则仅复制地址。