c++ - 我应该按值还是按右值引用捕获返回值?

标签 c++ c++11 move-semantics rvalue-reference

如果我有一个返回某个对象的函数,例如

std::vector<int> foo()
{
    std::vector<int> v;
    v.push_back(1);
    return v;
}

那么说有什么区别

std::vector<int> &&v = foo();

std::vector<int> v = foo();

(为什么)我会选择其中一个而不是另一个?

(我怀疑这可能是重复的问题,但我找不到正确的搜索词。)

最佳答案

阅读其中之一(从而知道它正在做一些合理的事情)需要了解临时对象以及如何将临时对象绑定(bind)到引用来延长临时对象的生命周期。另一个是:

std::vector<int> v = foo();

始终选择更容易理解的。如果 foo 返回 const&&& 也同样有效,而通过 && 存储它只会如果它按值或按 && 返回,则有效。

关于c++ - 我应该按值还是按右值引用捕获返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17768921/

相关文章:

c++ - C++ 11中的最小和最大可变参数模板变体?

c++11 - 在 VS 2015 中为 const vector<const T> 报告了编译器错误,但在 VS 2013 中没有

c++ - 如何创建一个可以使用 std::unique_ptr 作为模板参数正常工作的容器?

c++ - 复制 vs std::move 用于整数

c++ - 使用指针初始化数组,然后从中读回数据。

c++ - 一种在一维数组(位图)内迭代矩形区域的算法

C++ 将 *this 传递给基本构造函数

c++ - 为 const 引用和右值引用编写重载

c++ - move 赋值运算符和虚拟继承

c++ - 如何将 char 转换为关联的转义序列?