初学者问下关于强制转换的有关问题

菜鸟问下关于强制转换的问题
int ival = 100;
double dval = 1.12;

ival = ival * dval;
cout << ival << endl;
输出112。这个肯定

ival = ival * (int)dval;
cout << ival << endl;
输出100。这个可以理解。

可是为啥
ival *= (int)dval;
cout << ival << endl;
也是输出112,这个郁闷了?




------解决方案--------------------
要么程序写得有问题,要么编译器有问题.

over
------解决方案--------------------
啥编译器啊??我VS2008,输出100.如果你的是112,那么你还是用反汇编查看吧。这样就知道编译器怎么处理这个的了。
------解决方案--------------------
我也输出100
------解决方案--------------------
Assembly code

// 这两个一样
ival = ival * static_cast<int>dval;
ival *= static_cast<int>

------解决方案--------------------
int ival = 100;
double dval = 1.12;

ival = ival * dval;//ival=112
cout << ival << endl;

ival = ival * (int)dval;//ival =112*1
cout << ival << endl;

ival *= (int)dval;//ival =112*1
cout << ival << endl;
------解决方案--------------------
ival *= (int)dval;
和ival = ival * (int)dval;对于这个表达式是等价的。
------解决方案--------------------
囧,,,大家不要一起拷入代码。。。。上面一部分和下面一部份分开拷。。。。

别上了LZ的当。。。。

第二段代码当然是100, 妥妥的,毫无疑问

但第一段结束的ival已经是112了,再乘以1,当然还是112
------解决方案--------------------
没看明白,代码是怎么写的
------解决方案--------------------
探讨

囧,,,大家不要一起拷入代码。。。。上面一部分和下面一部份分开拷。。。。

别上了LZ的当。。。。

第二段代码当然是100, 妥妥的,毫无疑问

但第一段结束的ival已经是112了,再乘以1,当然还是112

------解决方案--------------------
请问怎样反汇编查看?我不会,想学习
探讨

啥编译器啊??我VS2008,输出100.如果你的是112,那么你还是用反汇编查看吧。这样就知道编译器怎么处理这个的了。

------解决方案--------------------
探讨

请问怎样反汇编查看?我不会,想学习引用:

啥编译器啊??我VS2008,输出100.如果你的是112,那么你还是用反汇编查看吧。这样就知道编译器怎么处理这个的了。

------解决方案--------------------
探讨

引用:

请问怎样反汇编查看?我不会,想学习引用:

啥编译器啊??我VS2008,输出100.如果你的是112,那么你还是用反汇编查看吧。这样就知道编译器怎么处理这个的了。

楼上的问题我也想问,反汇编用什么快捷键

------解决方案--------------------
我执行你的程序就是正常的,输出的是100,而不是112,可能是你编译器的问题
------解决方案--------------------
把原始代码贴出来,11楼说的有道理