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