对于
int a = 123;
bool b = a; //
---①
bool c = (bool)a; // ---②
bool d = bool(a); //
---③
这段代码,在gcc3.4.2中编译完全无误,但在VC2005(77626-009-0000007-41837)中却给出了三条警告:
warning
C4800: 'int' : forcing value to bool 'true' or 'false' (performance
warning)
对于②和③不应该出现警告大家应该没有意见吧?!
{
还是小心点,以避免不必要的争论,特此为'唯VS是从者'补充一句:如果您觉得VS2005这样做是正确的话,那么VS2005也应该在float到int之类的转化上给出一些警告,但它并没有这样做。
}
对于①,我个人觉得警告可有可无。
可有的原因在于
int 到 bool 确实发生了精度损失
可无的原因在于
其一,整型值 的这种用法太多了,尤其在 if/for 语句中
其二, 有可能有人不知道float和double的精度差别,有可能有人不知道int和float的差别(尤其是初学者),但我想没有人不知道bool和int的差别^_^,这是因为任何人都趋向于使用int,而不是char,更不是bool。所以能写出
bool b = a/*int*/ 的人绝对知道自己在做什么。
我的问题是:VS2005为什么给②和③来了一个警告?
阅读(1654) | 评论(6) | 转发(0) |