簡體   English   中英

為什么我不能使用== true檢查變量是否有值?

[英]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之前),沒有falsetrue ,但有0或非0值。

在現代C (來自C99 )中,有falsetrue<stdbool.h> ),但它們分別是01語法糖。

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是數字,而trueboolean

當您使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM