[英]Why i cant check if a variable have a value using == true?
if(10)
是真的,但if(10 == true)
是假的。 有人能告訴我為什么第一種情況將數字轉換為bool而第二種情況沒有?
if (10)
等於if (10 != 0)
,而if (10 == true)
是if (10 == 1)
(因為true
被提升為int
類型的值1
)。
通俗地說:兩件事都碰巧滿足某些財產並不是自然相同的事情。
(例如甜甜圈和飛盤都是圓形的,但這並不意味着甜甜圈等於飛盤。整數和布爾都可以在布爾上下文中進行評估,但這並不意味着每個評估為真的整數都是相等的每個真正的布爾值。)
if( ... )
{
// if statement
}
要在C ++中執行if
語句, ...
應該具有true
值。
當你寫if( 10 ){//something useful}
我認為10
對待為int
而不是bool
變量。 然后應該應用以下邏輯
if( 10 ) -> if( bool( 10 ) ) -> if( true )
當你寫if( 10 == true ){//something useful}
,根據C ++標准,場景背后應該有以下邏輯
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 )
因為它們完全不同。
在C中,任何非假的都是自動為真,而C對false
定義非常嚴格。
你可以想出if(10)
if(10 != false)
同樣if (10 == true)
if((10 == true) != false)
10
顯然不是true
,在這個意義上, 10
是數字,而true
是boolean
。
當您使用if語句時,編譯器必須評估條件,直到它達到true或false。 如果它沒有達到true或false,則必須將其轉換為true或false。 作為一般規則, 0
計算結果為false,其他所有計算結果為true。
因此, if(-1)
為真, if(234)
,依此類推。
表達式10 == true
已經計算為false,因此不需要進一步轉換。 if(10)
既不是真的也不是假的,那么編譯器必須使用我們的上述規則對其進行轉換,並且它變為真。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.