我在方法中有一个对象。该对象按值传入,在函数中修改,然后作为参数传递给 std::make_tuple,然后立即返回。
std::tuple<bool, X> func(X x)
{
// Modify x
// ...
return std::make_tuple(true, x);
}
我的问题是,x传递给std::make_tuple时会被移动吗?我知道如果我只是返回它它会被移动,但由于我将它传递给一个函数,它会被移动到函数中还是我需要将它包装在 std::move 中?
最佳答案
will x be moved when it is passed to std::make_tuple?
不,它不会被移动,因为它是一个左值。在一种情况下,当从函数返回左值时,左值可以被视为右值,但在您的示例中则不然——请参阅 C++11 标准的第 12.8/32 段。
如果你想从 x
中移走,你必须明确地说:
return std::make_tuple(true, std::move(x));
关于c++ - 移动到函数的最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17633410/