0

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

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)
{
}

会不会有两个动作?

4

1 回答 1

0

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

于 2021-03-03T18:34:21.343 回答