为什么我不能使用== true检查变量是否有值?

时间:2016-06-04 01:55:44

标签: c++ c

if(10)这是真的,但if(10 == true)是假的。有人能告诉我为什么第一种情况将数字转换为bool但第二种情况没有?

4 个答案:

答案 0 :(得分:21)

if (10)相当于if (10 != 0),而if (10 == true)if (10 == 1)(因为true被提升为类型{{1的值int 1}})。

用外行人的话来说:两件兼顾某些财产的事情都不会自动相同。

(例如,甜甜圈和飞盘都是圆形的,但这并不意味着圆环等于飞盘。整数和布尔都可以在布尔上下文中进行评估,但这并不意味着每个整数都被评估为true等于每个真正的布尔值。)

答案 1 :(得分:1)

if( ... )
{
     // if statement
}

要在C ++中执行if语句,...的值应为true

撰写if( 10 ){//something useful}

我认为10视为int而不是bool变量。应该应用以下逻辑

if( 10 ) -> if( bool( 10 ) ) -> if( true )

根据C ++标准编写if( 10 == true ){//something useful}时,场景背后应该有以下逻辑

if( 10 == true ) -> if( 10 == int( true ) ) -> if( 10 == 1 ) -> if( false )

您可以写一些类似

的内容
if( 10 != false )

if( !!10 == true )

if( ( bool ) 10 == true ) // alternatively, if( bool ( 10 ) == true )

在旧CC99之前),没有falsetrue,但有0或非0值。

在现代C(来自C99)中,有falsetrue<stdbool.h>),但它们是0的语法糖分别和1

if( 10 ) // evaluates directly since 10 is non-zero value

if( 10 == true ) -> if( 10 == 1 ) -> if( 0 )

答案 2 :(得分:-1)

因为它们完全不同。

在C中,任何非假的都是自动为真,而C对false的定义非常严格。

您可以将if(10)视为if(10 != false)

同样if (10 == true)if((10 == true) != false)

答案 3 :(得分:-2)

10显然不是true,因为10是一个数字而trueboolean

当你在if语句中时,编译器必须评估条件,直到它达到true或false。如果它没有达到true或false,则必须将其转换为true或false。作为一般规则,0的计算结果为false,其他所有计算结果为true。

所以if(-1)是真的,if(234)也是如此,依此类推。

表达式10 == true已经计算为false,因此不需要进一步转换。 if(10)既不是真的也不是假的,所以编译器必须使用上面的规则对其进行转换,并且它变为真。