Chinaunix首页 | 论坛 | 博客
  • 博客访问: 988138
  • 博文数量: 158
  • 博客积分: 4380
  • 博客等级: 上校
  • 技术积分: 2367
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-21 10:45
文章分类

全部博文(158)

文章存档

2012年(158)

我的朋友

分类: C/C++

2012-11-20 10:25:02

对于
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为什么给②和③来了一个警告?
阅读(1655) | 评论(6) | 转发(0) |
0

上一篇:VC2005的返回值优化

下一篇:VC2005中的 ">>"

给主人留下些什么吧!~~

网友评论2012-11-20 10:25:48

ork
赞成,但更倾向于“无”而不是“可有可无”,std对此有明确规定

4.12 Boolean conversions [conv.bool]  
An rvalue of arithmetic, enumeration, pointer, or pointer to member type can be converted to an rvalue of
type bool.  A zero value, null pointer value, or null member pointer value is converted to false; any
other value is converted to true.

可能是ms一贯的“工具傻瓜化”的设计理念导致必须为一些水平稍低的用户考虑更多,对于此类用户“能写出 bool b = a/*int*/ 的人绝对知道自己在做什么”不一定是真命题