将 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 的副本。它没有被移动。如果您使用指针或引用,则仅复制地址。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...