在这里的代码类型转换后,测试左值或右值:它是一个右值或左值后获得的铸造
#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 link结果是这样的指示右值导致类型转换后:
T
T const
T
T const
但在VC++ 2010,这是指示右值仅当它是一个类的类型的结果:
T
T const
T
T
这是一个编译器错误或只是一些未定义的行为时,类型强制转换为int?
请使用上TO-日期编译器当你运行这些测试 –
@MarcoA。 VC++ 2015给出了与VC++ 2010相同的结果 – Danh
@MarcoA,对不起,我没有。这不是免费的 – JavaMan