读书人

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

发布时间: 2012-05-09 12:13:59 作者: rapoo

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

读书人网 >C++

热点推荐