簡體   English   中英

if(intVar)和if(intVar!= 0)之間有區別嗎?

[英]Is there a difference between if (intVar) and if (intVar != 0)?

我有興趣了解c ++中這兩個if塊之間是否有區別。 如果您可以參考答案,這將非常有用。

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

if (intVar)
{
  //Do samething
}

其中intVar可以是具有任何值的任何類型的整數變量。

[編輯]關於“重復的問題”。 我沒有發現涉及if語句的任何問題。

if條件為boolean時所需的表達式類型。 表達式intVar!=0已經是布爾值,表達式intVar具有int類型,並且需要隱式轉換為布爾值。 碰巧的是,從intbool的轉換規則是:任何非零映射到true ,零映射到false ,因此生成的表達式求值完全相同。

有時編寫完整的intVar!=0可以增加清晰度(例如,要弄清楚您不是在為nullptr評估指針類型,而是為零評估整數類型),而在其他時候卻不這樣做-它確實取決於上下文。

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

4.14布爾轉換

算術,無作用域枚舉,指針或指向成員類型的指針的prvalue可以轉換為bool類型的prvalue。 零值,空指針值或空成員指針值將轉換為false; 任何其他值都將轉換為true

除了其他答案(為了好玩),我想說的是,對於一個用戶定義類型的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";
    }
}

但這是我不願討論的一個極端案例。

在C ++(和許多其他語言)中,沒有區別,因為任何非零值都是“ true”,零本身就是“ falsey”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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