问题描述
试图澄清我对何时发生移动的理解,以及何时最好编写按值而不是引用传递值的函数以从移动中获益。
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 的副本。它没有被移动。如果您使用指针或引用,则仅复制地址。