理解右值引用变量
在 C 中,右值引用是一种特殊类型的引用,只能绑定到右值(没有名称的值) )。然而,当函数同时使用左值引用和右值引用重载时,会出现令人惊讶的行为。
混乱:右值引用变量的行为类似于左值
考虑以下函数重载:
void f(T&&); // Overload #1 (rvalue reference) void f(T&); // Overload #2 (lvalue reference)
在另一个函数内函数:
void g(T&& t) { f(t); // Calls Overload #2 (lvalue reference) }
令人惊讶的结果是调用了 Overload #2(左值引用),即使参数 t 是右值引用。
原因:右值引用是具有特殊类型的左值
右值引用被视为左值,因为它们有名称并且可以使用作为大多数用途的左值。但是,它们的类型(右值引用)指定了它们有限的绑定功能。
如何调用右值引用重载
要调用右值引用重载,参数必须是使用 static_cast 运算符显式转换为右值引用:
f(static_cast<T&&>(t));
其他规则管理右值引用
以上是为什么右值引用有时在 C 函数重载中表现得像左值?的详细内容。更多信息请关注PHP中文网其他相关文章!