关于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
004113FB fld dword ptr [a]
004113FE call @ILT+215(__ftol2_sse) (4110DCh)
(int&)a
00411432 mov ecx,dword ptr [a]
00411435 push ecx