当前位置:  开发笔记 > 编程语言 > 正文

编译器警告C4806(number == bool值)的动机是什么?

如何解决《编译器警告C4806(number==bool值)的动机是什么?》经验,为你挑选了1个好方法。

为什么被true==151认为是不安全的操作true==true,而实际上持有相同的表达却不是.而且,为什么true==151永远不可能是真的,不像true&&151

cout<<(true==151);      //0 and it gives compiler warning C4806
cout<<(true==true);     //1 no warning
if(true==151)cout<<"1"; //"0" and warning again
if(true&&151)cout<<"1"; //1 no warning
if(151)cout<<"1";       //1

警告C4806本身

'==':不安全的操作:提升为类型'int'的类型'bool'的值不能等于给定的常量

Mark Adelsbe.. 5

首先让我们回答你的第二个问题: true==151总是假的,因为它true被定义为有价值1.

通常,如果将数值解释为布尔值,则0将为false,其他任何内容都为true; 但是文字true必须具有特定值,并且该值为1.

那么为什么要警告==操作数是bool和整数呢?嗯,首先是因为151==true,如果你注意它,看起来它应该是真的(因为151是一个"真正的"值)但是 - 如上所述 - 它不是.这可能是错误的来源,因此值得警告.更一般地说,您直接比较两种不同的类型,其中隐式转换可能不明显/可能具有非显而易见的后果.



1> Mark Adelsbe..:

首先让我们回答你的第二个问题: true==151总是假的,因为它true被定义为有价值1.

通常,如果将数值解释为布尔值,则0将为false,其他任何内容都为true; 但是文字true必须具有特定值,并且该值为1.

那么为什么要警告==操作数是bool和整数呢?嗯,首先是因为151==true,如果你注意它,看起来它应该是真的(因为151是一个"真正的"值)但是 - 如上所述 - 它不是.这可能是错误的来源,因此值得警告.更一般地说,您直接比较两种不同的类型,其中隐式转换可能不明显/可能具有非显而易见的后果.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有