我试图理解右值引用和移动语义.在下面的代码中,当我将10传递给Print函数时,它会调用rvalue reference overload,这是预期的.但究竟发生了什么,10将被复制(或从它引用的地方).其次std :: move实际上做了什么?它从i中提取值10然后通过吗?或者是编译器使用右值参考的指令?
void Print(int& i) { cout<<"L Value reference "<<endl; } void Print(int&& i) { cout<<"R Value reference "<< endl; } int main() { int i = 10; Print(i); //OK,understandable Print(10); //will 10 is not getting copied? So where it will stored Print(std::move(i)); //what does move exactly do return 0; }
谢谢.
解决方法
But what exactly happens,where that 10 will get copied (or from where it referred)
创建临时值,并将引用传递给函数.临时值是右值,因此可以绑定到右值参考值;所以选择了第二次过载.
Secondly what
std::move
actually do?
它为您提供了对其参数的右值引用.它与static_cast< T&&>等价(根据定义).
尽管有这个名字,但它本身并没有任何动作;它只是为您提供了一个可用于移动值的引用.