在函数的最后一行移动
moving on the last line of a function
我在一个方法中有一个对象。对象按值传入,在函数中进行修改,然后作为参数传递给std::make_tuple,然后立即返回。
std::tuple<bool, X> func(X x)
{
// Modify x
// ...
return std::make_tuple(true, x);
}
我的问题是,当x被传递给std::make_tuple时,它会被移动吗?我知道如果我只是返回它,它会被移动,但由于我将它传递给一个函数,它会移动到函数中吗?还是我需要用std::move包装它?
当x被传递给std::make_tuple时,它会被移动吗?
不,它不会被移动,因为它是左值。在一种情况下,当从函数返回左值时,可以将其视为右值,但在您的示例中则不然——请参阅C++11标准的12.8/32段。
如果你想从中移动x
,你必须明确地说:
return std::make_tuple(true, std::move(x));
否,您需要明确地移动它:
return std::make_tuple(true, std::move(x));
但是,您可能更想要optional
*:
std::optional<X> func(X x)
{
// modify x
return std::move(x);
}
允许通过移动来构造可选对象,所以这是一个"movy"。
*)optional
将在未来的C++标准中使用;同时boost::optional
也起到了同样的作用。
相关文章:
- 将对象移动到std::shared_ptr
- 何时在引用或唯一指针上使用移动语义
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 从C++dll访问C#中的一行主要参数
- 如何从具有移动语义的类对象中生成共享指针
- 将shared_ptr移动到<StructA>shared_ptr<变体<结构A、结构 B>>
- C / C++ 移位/偏移/向左或向右移动位图?
- 在C++中,我如何接受不同于同一行的用户输入
- MSVC将仅移动结构参数解释为指针
- 自定义先决条件对移动分配运算符有效吗
- 返回值优化:显式移动还是隐式
- 如何从一行中读取特定数量的字符?(C++)
- 为什么 getline 没有移动到下一行
- 从文件读取时如何使用运算符后将光标移动到下一行">>"
- 如何在C++中读/写文件时移动到下一行
- 关于使用 c++ 代码将数据从一行移动到下一行以擦除第一行数据
- 在函数的最后一行移动
- 从 txt 文件读取时,我的程序不会移动到下一行