整数到布尔奇怪的语法

时间:2015-03-26 17:42:38

标签: c++ syntax int boolean

我进入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)方面正在发生的事情。有人可以解释为什么这个比我知道语言的人正在做这样的语法吗?

6 个答案:

答案 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)是一个评估为truefalse的表达式。因此,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本身就是一个评估为truefalse的表达式,而不是一些只能在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) {
   ...
}

或其他什么