std::forward
我在尝试了解以下示例时遇到了以下示例
// forward example
#include <utility> // std::forward
#include <iostream> // std::cout
// function with lvalue and rvalue reference overloads:
void overloaded (const int& x) {std::cout << "[lvalue]";}
void overloaded (int&& x) {std::cout << "[rvalue]";}
// function template taking rvalue reference to deduced type:
template <class T> void fn (T&& x) {
overloaded (x); // always an lvalue
overloaded (std::forward<T>(x)); // rvalue if argument is rvalue
}
int main () {
std::cout << "calling fn with rvalue: ";
fn (0);
std::cout << '\n';
return 0;
}
程序的输出是
用右值调用 fn:[左值][右值]
现在我的问题是我们是如何获得lvalue
第一的?这是我在main
我称为fn(0);
Now 0 is rvalue 中的思路。因此,通用参考 x 被推导出为以下
void fn (int&& && x);
现在根据参考折叠我们会得到
void fn (int&& x);
从而使x
行为像右值。因此,如果x
传递,则应调用右值重载方法。然而,似乎调用了另一个重载的左值引用函数。如果有人能澄清这一点,我将不胜感激