菜鸟问下关于强制转换的问题
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楼说的有道理