首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于int和int &转换的有关问题

2013-06-26 
关于int和int &转换的问题10.以下两条输出语句分别输出什么?[C++难]floata1.0fcout(int)aendlcout

关于int和int &转换的问题
10.以下两条输出语句分别输出什么?[C++难]   
   float    a    =    1.0f;   
   cout    <<    (int)a    <<    endl;   
   cout    <<    (int&)a    <<    endl;   
   cout    <<    boolalpha    <<    (    (int)a    ==    (int&)a    )    <<    endl;    //    输出什么?   
   float    b    =    0.0f;   
   cout    <<    (int)b    <<    endl;   
   cout    <<    (int&)b    <<    endl;   
   cout    <<    boolalpha    <<    (    (int)b    ==    (int&)b    )    <<    endl;    //    输出什么?   
    
(int &)a和(int &)b到底输出的是什么呢? C++
[解决办法]
(int&)a的结果是产生一个int&临时引用,这个临时引用把a原来的存储视作一个int,与(int)a是完全不同的,因此(int&)a的输出并不是1,而是将a存储(浮点数的IEEE754标准内存布局)的一部分视作int的结果;

而(int&)b与(int)b相等只不过是巧合,因为0.0的内存布局所有位皆为0,恰好与int的0的内存布局一样,所以相等。
[解决办法]

引用:
(int&)a的结果是产生一个int&临时引用,这个临时引用把a原来的存储视作一个int,与(int)a是完全不同的,因此(int&)a的输出并不是1,而是将a存储(浮点数的IEEE754标准内存布局)的一部分视作int的结果;

而(int&)b与(int)b相等只不过是巧合,因为0.0的内存布局所有位皆为0,恰好与int的0的内存布局一样,所以相等。

我插一句哈,这其实就是所谓的位模式。类似指针的转换
[解决办法]
看看生成的汇编代码,就知道了
(int)a  

004113FB  fld         dword ptr [a]  
004113FE  call        @ILT+215(__ftol2_sse) (4110DCh)  


(int&)a

00411432  mov         ecx,dword ptr [a]  
00411435  push        ecx  

热点排行