通过引用,我指的是正常参考 - 用于"通过引用调用"功能。这个引用和左值引用之间有区别吗?
答案 0 :(得分:3)
C ++中有两种引用:左值引用和右值引用。两者都是参考。绑定到任何一种引用的函数参数是“通过引用传递”。
Lvalue引用绑定到lvalues,const-lvalue引用也绑定到rvalues。*
Rvalue只引用 绑定到rvalues,从不绑定到左值。
分离这两种引用的效用在于,rvalue引用可以假设引用的值没有别名(因为它是纯rvalue(即临时)或故意声明的xvalue (无论是有效的),因此可以在没有人注意的情况下进行修改。
这允许移动资源和传输所有权的概念,当引入rvalue引用时,在C ++ 11之前的类型系统中无法正确表达。在此之前,只有一种参考,即左值参考。
*)Microsoft编译器还允许绑定非常量左值对rvalues的引用。这是非标准的,令人惊讶和混乱。
提醒一下,C ++中值类别的分类是这样的:
value
/ \
glvalue rvalue
/ \ / \
lvalue xvalue prvalue
T & f() T && f() T f()
下面是一个示例:函数调用表达式f()
的值类别如前所示,前提是f
具有相应的声明返回类型(并且T
不是引用类型) 。此外,函数的返回类型可以恢复为decltype(f())
。