2016-12-05 93 views
1

我很想知道在C++中這兩個塊是否有區別。 這將是非常有用的,如果與答案,你可以引用一些參考。if(intVar)和if(intVar!= 0)之間有區別嗎?

if (intVar!= 0) 
{ 
    //Do something 
} 

if (intVar) 
{ 
    //Do samething 
} 

intVar在哪裏,可以是具有任何值的任何類型的整數變量的。

[編輯]在主題「重複問題」。我沒有發現涉及if語句的任何問題。

+4

絕對沒有區別,無論如何。 –

+0

可能的重複[C/C++布爾類型總是保證爲0或1時,類型轉換爲int?](http://stackoverflow.com/questions/4276207/is-cc-bool-type-always-guaranted將0或1的時候指定爲int) – Andrew

+1

我不同意大家說'沒有區別'。顯然有區別。第一個版本比第二個版本長5個字符。 – SergeyA

回答

6

if條件中所需的表達式的類型是布爾值。表達式intVar!=0已經是布爾值,表達式intVar的類型爲int,並且需要隱式轉換爲布爾值。恰巧intbool的轉換規則恰恰是,任何非零映射到true和零映射到false,因此得到的表達式評估完全相同。

有時寫滿intVar!=0可以增加清晰度(例如,爲了清楚你不是評估nullptr的指針類型,而是用於零的整數類型),而其他時候則不是 - 它確實取決於在上下文中。

關於要求的參考,我將使用standard。與轉化[conv.bool]的部分:

4.14布爾轉換

算術,無作用域枚舉,指針,或指針的構件類型A prvalue可以被轉換爲一個 prvalue類型的布爾。零值,空指針值或空成員 指針值被轉換爲false;任何其他值被轉換爲 真

+0

我開始認爲這可能是正確的答案,但你能否引用任何參考? – Rama

+0

@拉瑪標準草案可在線獲取。搜索「轉換」。 – molbdnilo

4

在C++(以及許多其他語言)中,沒有任何區別,因爲任何非零值都是「truey」而零本身就是「falsey」。

5

此外對其他的回答(和樂趣),我想地說,一個用戶定義的類型的intVar限定的隱式轉換操作者int和另一bool,這兩個表達式可以有不同的行爲:

#include <iostream> 

class Celcius 
{ 
    int _value; 
public: 
    Celcius(int value) : _value(value) {} 
    operator int() { return _value; } 
    operator bool() { return _value > -273; } 
}; 

int main() 
{ 
    Celcius waterBoilingPoint(0); 

    if (waterBoilingPoint != 0) { // false 
     std::cout << "This is not Standard Conditions for Temperature and Pressure!\n"; 
    } 

    if (waterBoilingPoint) { // true 
     std::cout << "This is not 0K (pun intended).\n"; 
    } 
} 

但這是一個邊緣的情況下我也不會跳進去。

+2

優秀點。 – SergeyA

+0

不錯!這是最無聊的問題最有趣的答案:) – Venemo

相關問題