我很想知道在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