首页 > 后端开发 > C++ > C 中什么时候可以将右值引用参数绑定到左值参数?

C 中什么时候可以将右值引用参数绑定到左值参数?

Linda Hamilton
发布: 2024-12-07 21:48:18
原创
886 人浏览过

When Can an Rvalue Reference Parameter Bind to an Lvalue Argument in C  ?

为什么右值引用参数可以绑定到左值参数

在 C 中,右值引用应该绑定到右值。然而,在某些情况下,右值引用参数可以匹配左值参数,这让许多程序员感到惊讶。

考虑以下代码:

void f(T&&); // #1
void f(T&);  // #2
登录后复制

通常,我们期望 f(T&&)传递右值时调用重载,传递左值时调用 f(T&) 重载。但是,行为不同:

void g(T&& t) 
{ 
  f(t);  // calls #2
}
登录后复制

在此示例中,即使 t 是右值,也会调用 f(T&) 重载。发生这种情况是因为,尽管它是右值引用类型,t 仍然被视为左值。

基本原理:

右值通常是没有名称的实体或将失去名称的实体名字很快。右值引用只能绑定到右值。但是,t 有名称,并且它的生命周期不会立即过期。

T&& 类型:

T&& 是右值引用的类型。虽然它只能绑定到右值,但它在其他方面表现为右值引用类型的左值。它的右值引用性质仅在其构造期间和执行 decltype(variable_name) 时才重要。

std::move() 的作用:

std::move( ) 通过执行返回一个右值引用static_cast(t).

相关规则:

  • 从函数返回命名值时,会发生隐式移动到右值引用参数,或者当值没有名称时。
  • 只有右值引用和 const& 可以绑定到右值。
  • 当直接绑定到构造函数外部的引用时,右值引用和 const& 会经历生命周期扩展。
  • 如果 T 的类型为 X& 或 X const&,则引用折叠会将 T&& 转换为 X& 或 X const& .
  • 在类型推导上下文中,T&& 将 T 推导为 X, X&, X const&,或 X const&& 基于参数类型。

以上是C 中什么时候可以将右值引用参数绑定到左值参数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板