我试图理解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) 我有两段代码:
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引用的函数?
考虑以下功能:
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)
除了避免复制之外,还有其他语义差异吗?