在下面的简单示例中,我预计输出将是“2222”。但是 VC++ 11.0 和 g++ 4.6.1 的实际输出都是“2122”。
#include <iostream>
template <class T>
void func(T x)
{
x = 2;
std::cout << x;
}
int main()
{
int x = 1;
func((int &)x);
std::cout << x;
func<int &>(x);
std::cout << x;
return 0;
}
我反汇编发现第一个func调用func((int &)x)使用了func<int>而不是func<int &>。这是为什么以及如何发生的?