相关疑难解决方法(0)

C++ 11 rvalues和移动语义混淆(return语句)

我试图理解rvalue引用并移动C++ 11的语义.

这些示例之间有什么区别,哪些不会执行矢量复制?

第一个例子

std::vector<int> return_vector(void)
{
    std::vector<int> tmp {1,2,3,4,5};
    return tmp;
}

std::vector<int> &&rval_ref = return_vector();
Run Code Online (Sandbox Code Playgroud)

第二个例子

std::vector<int>&& return_vector(void)
{
    std::vector<int> tmp {1,2,3,4,5};
    return std::move(tmp);
}

std::vector<int> &&rval_ref = return_vector();
Run Code Online (Sandbox Code Playgroud)

第三个例子

std::vector<int> return_vector(void)
{
    std::vector<int> tmp {1,2,3,4,5};
    return std::move(tmp);
}

std::vector<int> &&rval_ref = return_vector();
Run Code Online (Sandbox Code Playgroud)

c++ c++-faq rvalue-reference move-semantics c++11

415
推荐指数
3
解决办法
10万
查看次数

C++:在这种情况下引用的优点是什么?

我有两段代码:

int f1(int b)
{
   return b;
}

int & f2(int b)
{
   return b;
}
Run Code Online (Sandbox Code Playgroud)

这些功能有什么区别?我知道第二个返回一个引用,但由于我可以以相同的方式使用这两个函数,有什么区别?

编辑:这个功能更好吗?

int && f2(int b)
{
   return b;
}
Run Code Online (Sandbox Code Playgroud)

什么时候应该使用返回引用的函数?

Edit2:那我什么时候应该使用返回Rvalue引用的函数?

c++ reference function

2
推荐指数
2
解决办法
421
查看次数

这是rvalue引用的正确用法吗?

考虑以下功能:

vector<int> get_vector()
{
    vector<int> xs;
    // Do some stuff to fill the vector with numbers...
    return xs;
}
Run Code Online (Sandbox Code Playgroud)

写下面的内容是否有意义?主要目标是避免在返回时复制矢量.

vector<int>&& get_vector()
{
    vector<int> xs;
    // Do some stuff to fill the vector with numbers...
    return std::move(xs);
}
Run Code Online (Sandbox Code Playgroud)

除了避免复制之外,还有其他语义差异吗?

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

1
推荐指数
1
解决办法
106
查看次数