[英]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
類型,並且需要隱式轉換為布爾值。 碰巧的是,從int
到bool
的轉換規則是:任何非零映射到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.