首页 > C/C++开发工具专区 > C/C++其它IDE资源 > 强制转化为引用 在g++和vc++上的区别
2007
01-08

强制转化为引用 在g++和vc++上的区别









































表达式 g++中类型 g++中值 vc++中类型 vc++中值
(const float&)0x3f99999a; int 1067030938 float 1.06703e+09
(const float&)(const int&)0x3f99999a; float 1.2 float 1.06703e+09
(float&)(const int&)0x3f99999a; 编译失败 编译失败 float 1.2
const int tmp = 0x3f99999a;
(const float&)tmp;
float 1.2 float 1.06703e+09
const int tmp = 0x3f99999a;
(float&)tmp;
float 1.2 float 1.2
说明:int(0x3f99999a) 和 float(1.2) 在内存中的数据是一样的。

看来只有最后一种方法是通用的,C中可以写成 *(float*)&tmp;

另外,在VC2005中 (float&)(const int&)0x3f99999a 竟然可以编译成功,这定然是个bug:
cout << &(int&)(const int&)0x3f99999a << endl;
在VC2005中编译运行成功,输出了常数 0x3f99999a 的地址,而 常数 应当是没有地址的,无论VC2005使用何种实现方法,比如使用一个变量来存储 0x3f99999a,都不应该输出它的地址。


强制转化为引用 在g++和vc++上的区别》有 2 条评论

  1. hiroki 说:

    支持支持楼主啊

留下一个回复