我进入C ++开发还不到一年(在此之前专注于其他语言)我正在研究一个已经做了二十年的人的代码。我以前从未见过这种语法,希望有人可以提供一些帮助。
bool b; // There exists a Boolean variable.
int i; // There exists an integer variable.
sscanf(value, "%d", &i); // The int is assigned from a scan.
b = (i != 0); // I have never seen this syntax before.
我得到布尔值是从刚刚扫描的int中分配的,但是我没有得到(*!= 0)方面正在发生的事情。有人可以解释为什么这个比我知道语言的人正在做这样的语法吗?
答案 0 :(得分:2)
请阅读: http://en.cppreference.com/w/cpp/language/operator_comparison
operator!=的结果是bool。所以这个人说“将i中的值与0进行比较”。如果'i'不等于0,则'!='返回true。
因此,实际上b中的值为“如果'i'不是零,则为真”
编辑:回应OP对此的评论,是的,如果您使用任何其他返回bool的运算符,您可能会有类似的情况。当然,当与int类型一起使用时,!=表示负数评估为true。如果>使用0,然后0和负数将评估为假。
答案 1 :(得分:2)
如果表达式为真(即(i != 0)
为非零),则表达式true
求值为布尔值i
,否则为false
。
然后将此值分配给b
。
如果你更喜欢简洁,那么你会从b = i;
得到相同的结果,因为数字类型的标准布尔转换给出false
为零,而真为非零。
或b = (i != 0) ? true : false;
如果你喜欢无关的冗长。
答案 2 :(得分:1)
(i != 0)
是一个评估为true
或false
的表达式。因此,b
的值为true/false
,具体取决于i
的值。
答案 3 :(得分:1)
这是相当基本的语法。 !=
运算符执行"不等于"比较。
您可能会对比较运算符的结果直接初始化bool
的简写感到困惑,但语法本身并不深奥。
该计划基本上相当于:
bool b;
int i;
sscanf(value, "%d", &i);
if (i != 0)
b = true;
else
b = false;
关键是i != 0
本身就是一个评估为true
或false
的表达式,而不是一些只能在if
语句中使用的魔法。
答案 4 :(得分:1)
基本上,如果满足条件(i not_equal_to 0),则b得到值“true”。否则b的值为“false”。
答案 5 :(得分:0)
在这里," i!= 0"是一个布尔表达式,如果" i"如果为零则为非零和假。
这里发生的一切都是该表达式被赋值给变量的结果。
你也可以做......
boolean canDrinkAlcohol = (person.age() >= 18 && person.country.equals("UK") || person.age() >= 21 && person.county.equals("US"));
...
if(canDrinkAlcohol) {
...
}
或其他什么