这里的代码在类型转换后测试左值或右值:
#include <stdio.h>
template <typename T>
T const f1(T const &t) {
printf("T const \n");
return t;
}
template <typename T>
T f1(T &t) {
printf("T\n");
return t;
}
struct KK {
int a;
};
int main()
{
KK kk;
kk.a=0;
int ii;
f1(kk);
f1((KK)kk);
f1(ii);
f1((int)ii);
return 0;
}
在 gcc链接中,结果如下所示,表明类型转换后产生的右值:
T
T const
T
T const
但在 VC++2010 中,只有当它是类类型时,才会显示右值:
T
T const
T
T
那么当类型转换为 int 时,它是编译器错误还是只是一些未定义的行为?