if(10)
这是真的,但if(10 == true)
是假的。有人能告诉我为什么第一种情况将数字转换为bool但第二种情况没有?
答案 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 )
在旧C
(C99
之前),没有false
或true
,但有0或非0值。
在现代C
(来自C99
)中,有false
或true
(<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
是一个数字而true
是boolean
。
当你在if语句中时,编译器必须评估条件,直到它达到true或false。如果它没有达到true或false,则必须将其转换为true或false。作为一般规则,0
的计算结果为false,其他所有计算结果为true。
所以if(-1)
是真的,if(234)
也是如此,依此类推。
表达式10 == true
已经计算为false,因此不需要进一步转换。 if(10)
既不是真的也不是假的,所以编译器必须使用上面的规则对其进行转换,并且它变为真。