原理是因为int&会被隐式转换成float&&,而float&会被隐式转换成int&&。
#include <iostream>
using namespace std;
void f(int&& ) { cout << "int"; }
void f(float&&) { cout << "float"; }
void p(int &x) { f(x); }
void p(float &x) { f(x); }
int main()
{
float x=1.0;
int y=2;
p(x);
p(y);
}
至于为什么会这么转换,我个人认为可能是bug。