Chinaunix首页 | 论坛 | 博客
  • 博客访问: 831387
  • 博文数量: 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为什么给②和③来了一个警告?
阅读(1565) | 评论(6) | 转发(0) |
0

上一篇:VC2005的返回值优化

下一篇:VC2005中的 ">>"

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

网友评论2012-11-20 10:26:27

lin
即使加了(bool),也会出现警告。看样子写成0!=a是不出现警告的唯一方法了。不变态不行了。^_^.

网友评论2012-11-20 10:26:19

小力
我倒觉得这是个体贴的功能呢

网友评论2012-11-20 10:26:12

小力
注意,这个是“性能警告”,不是语法或什么c++标准的问题,vc不过在提醒你这样做在性能上可能会遭到损失,周星星同学觉得有什么不妥吗?

网友评论2012-11-20 10:26:03

Zhuyie
注意VC报的是什么类型的警告?performance warning。这说明此种用法在VC编译器中存在性能问题。

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

周星星
我一开始也倾向于写成
bool b = ( 0 != a );
但后来觉得有点变态 ^_^