初学者问下关于强制转换的有关问题
菜鸟问下关于强制转换的问题
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
------解决方案--------------------
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
------解决方案--------------------
没看明白,代码是怎么写的
------解决方案--------------------
------解决方案--------------------
请问怎样反汇编查看?我不会,想学习
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
我执行你的程序就是正常的,输出的是100,而不是112,可能是你编译器的问题
------解决方案--------------------
把原始代码贴出来,11楼说的有道理