我试图理解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) 我知道临时不能绑定到非const引用,但它可以绑定到const引用.那是,
A & x = A(); //error
const A & y = A(); //ok
Run Code Online (Sandbox Code Playgroud)
我也知道在第二种情况(上图)中,临时创建A()的生命周期延长到const引用的生命周期(即y).
但我的问题是:
可以将绑定到临时的const引用进一步绑定到另一个const引用,将临时的生命周期延长到第二个对象的生命周期吗?
我尝试过这个并没有用.我不太明白这一点.我写了这段代码:
struct A
{
A() { std::cout << " A()" << std::endl; }
~A() { std::cout << "~A()" << std::endl; }
};
struct B
{
const A & a;
B(const A & a) : a(a) { std::cout << " B()" << std::endl; }
~B() { std::cout << "~B()" << std::endl; }
};
int …Run Code Online (Sandbox Code Playgroud)