为什么右值引用参数可以绑定到左值参数
在 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
相关规则:
以上是C 中什么时候可以将右值引用参数绑定到左值参数?的详细内容。更多信息请关注PHP中文网其他相关文章!