读完帖子后:http://www.cprogramming.com/c++11/rvalue-references-and-move-semantics-in-c++11.html http://www.cprogramming.com/c++11/rvalue-references-and-move-semantics-in-c++11.html.
我无法弄清楚当您编写将左值或右值引用作为参数的函数时,例如:
void printReference (const string& str)
{
cout << str;
}
void printReference (string&& str)
{
cout << str;
}
why the firstprintReference 函数可以接受任何参数,无论是左值还是右值,并且不管左值或右值是否可变。
然而,在secondprintReference 函数,只允许传递可变的右值。
可能是我的理解有误,谁能帮我解决一下。
第一个选项可以采用左值,因为它是左值引用。它可以接受右值,因为它被标记了const
并且右值可以绑定到const
左值引用。
第二个版本只允许非const
右值,因为你不能隐式剥离const
来自引用和右值引用不允许左值绑定到它们。
语义上的区别在于,前一个函数是说“我只是要阅读你在这里传递的内容,我不想复制它”,而后者是说“我保留从这个对象中剔除内容的权利”并用它们粉刷我的客厅”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)