c++ - 移动到函数的最后一行

标签 c++ c++11

我在方法中有一个对象。该对象按值传入,在函数中修改,然后作为参数传递给 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/

相关文章:

c++ - 将 C++ 游戏部署到其他 Windows 机器

c++ - std::tuple get() 成员函数

c++ - 使用 std::conditional 根据模板参数选择成员类型

c++ - 将参数作为右值引用传递给函数与 const 左值引用

c++ - 完美转发和临时对象的范围

c++ - try block 中一条语句中的异常是否会导致控制流绕过 try block 中的任何剩余语句?

c++ - strcat 替代问题 C++

c++ - 如何使用Chrono vs ctime库输入设置的开始时间和结束时间

C++ 字到字节

c++ - 在 Crypto++ 库中找不到 hkdf.h