我很想知道在C++中這兩個塊是否有區別。 這將是非常有用的,如果與答案,你可以引用一些參考。if(intVar)和if(intVar!= 0)之間有區別嗎?
if (intVar!= 0)
{
//Do something
}
和
if (intVar)
{
//Do samething
}
intVar
在哪裏,可以是具有任何值的任何類型的整數變量的。
[編輯]在主題「重複問題」。我沒有發現涉及if語句的任何問題。
我很想知道在C++中這兩個塊是否有區別。 這將是非常有用的,如果與答案,你可以引用一些參考。if(intVar)和if(intVar!= 0)之間有區別嗎?
if (intVar!= 0)
{
//Do something
}
和
if (intVar)
{
//Do samething
}
intVar
在哪裏,可以是具有任何值的任何類型的整數變量的。
[編輯]在主題「重複問題」。我沒有發現涉及if語句的任何問題。
if
條件中所需的表達式的類型是布爾值。表達式intVar!=0
已經是布爾值,表達式intVar
的類型爲int
,並且需要隱式轉換爲布爾值。恰巧int
到bool
的轉換規則恰恰是,任何非零映射到true
和零映射到false
,因此得到的表達式評估完全相同。
有時寫滿intVar!=0
可以增加清晰度(例如,爲了清楚你不是評估nullptr
的指針類型,而是用於零的整數類型),而其他時候則不是 - 它確實取決於在上下文中。
關於要求的參考,我將使用standard。與轉化[conv.bool]的部分:
4.14布爾轉換
算術,無作用域枚舉,指針,或指針的構件類型A prvalue可以被轉換爲一個 prvalue類型的布爾。零值,空指針值或空成員 指針值被轉換爲false;任何其他值被轉換爲 真
在C++(以及許多其他語言)中,沒有任何區別,因爲任何非零值都是「truey」而零本身就是「falsey」。
此外對其他的回答(和樂趣),我想地說,一個用戶定義的類型的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/C++布爾類型總是保證爲0或1時,類型轉換爲int?](http://stackoverflow.com/questions/4276207/is-cc-bool-type-always-guaranted將0或1的時候指定爲int) – Andrew
我不同意大家說'沒有區別'。顯然有區別。第一個版本比第二個版本長5個字符。 – SergeyA