我很想知道这两个if块在c ++中是否存在差异.如果得到答案你会引用一些参考,这将是非常有用的.
if ( intVar!= 0 )
{
//Do something
}
Run Code Online (Sandbox Code Playgroud)
和
if (intVar)
{
//Do samething
}
Run Code Online (Sandbox Code Playgroud)
其中intVar,可以是任何类型的具有任何值的整数变量.
[编辑]关于主题"重复的问题".我没有发现任何涉及if语句的问题.
if条件中所需表达式的类型是boolean.表达式intVar!=0已经是boolean,表达式intVar有类型int,需要隐式转换为boolean.实际上,intto 的转换规则bool正是任何非零映射到true零映射到的false,因此结果表达式求值完全相同.
有时候写完全intVar!=0可以增加清晰度(例如,为了清楚地表明你不是在评估指针类型nullptr而是为零而不是整数类型),而有时则不是 - 它实际上取决于上下文.
关于要求参考,我将使用该标准.有关转化的部分[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";
}
}
Run Code Online (Sandbox Code Playgroud)
但这是一个我不会跳进去的边缘情况.
| 归档时间: |
|
| 查看次数: |
196 次 |
| 最近记录: |