c – 当我们使用rvalue引用时,究竟会发生什么?std :: move如何工作?

前端之家收集整理的这篇文章主要介绍了c – 当我们使用rvalue引用时,究竟会发生什么?std :: move如何工作?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图理解右值引用和移动语义.在下面的代码中,当我将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&&>等价(根据定义).

尽管有这个名字,但它本身并没有任何动作;它只是为您提供了一个可用于移动值的引用.

猜你在找的C&C++相关文章