为什么C++的右值引用&&传参时会看做左值呢?
C++的右值引用&&传参时会看做左值原因:左值等号左边的值。其实左值和右值是C++里面比较基础且严谨的概念。
右值引用是C++11中最重要的新特性之一,它解决了C++中大量的历史遗留问题,使C++标准库的实现在多种场景下消除了不必要的额外开销,也使得另外一些标准库成为可能。
即使你并不直接使用右值引用,也可以通过标准库,间接从这一新特性中受益。为了更好的理解标准库结合右值引用带来的优化,我们有必要了解一下右值引用的重大意义。
计算机语言:
ISO C++03规定表达式必须是左值或右值之一。而在ISO C++11中,左值性被正式地扩充为更复杂的值类别(value category) :左值是返左值(glvalue, "generic lvalue") 的一类,后者和纯右值(prvalue, "pure rvalue") 相对。
纯右值相当于之前版本的右值,此外还有消亡值(xvalue, "eXpired value") 。函数名作为表达式在C++中是左值。
ISO C/C++中,左值可以进一步分为可以修改的左值(modifiable lvalue) 和不可修改的左值。只有可修改的左值才能作为赋值表达式的左操作数。不可修改的左值的一类例子是具有const类型的左值。