Integer to Boolean strange syntax
我不到一年的C++开发(专注于其他语言之前),我正在看一个家伙的代码谁已经这样做了二十年。我以前从未见过这种语法,希望有人能帮上忙。
1 2 3 4 5 | 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)正在发生的事情的各个方面。有人能解释一下为什么这个比我更懂语言的人会这样做吗?
表达式
然后将该值分配给
如果你更喜欢简洁而不是明晰的话,你会从
如果你喜欢无关冗长的话,也可以选择
请阅读:http://en.cppreference.com/w/cpp/language/operator_比较
操作员的结果!=是一个布尔。所以这个人说"将i中的值与0进行比较"。如果"i"不等于0,那么"!='返回真。
因此实际上,b中的值是"如果‘i’不是零,则为真"
编辑:为了回应操作人员对此的评论,是的,如果使用任何其他返回bool的操作符,您可能会遇到类似的情况。当然,当与int类型一起使用时!=表示负数,计算结果为真。如果使用>0,则0和负数都将计算为假。
基本上,如果满足条件(i不等于0),b得到值"真"。否则B得到值"假"。
这是相当基本的语法。
您可能会被直接从比较运算符的结果初始化
程序基本上等同于:
1 2 3 4 5 6 7 8 9 | bool b; int i; sscanf(value,"%d", &i); if (i != 0) b = true; else b = false; |
关键是,
这里,"我!=0"是一个布尔表达式,如果"i"不是零,则为真;如果"i"是零,则为假。
这里所发生的一切就是这个表达式被分配给一个变量的结果。
你也可以做像…
1 2 3 4 5 6 7 | boolean canDrinkAlcohol = (person.age() >= 18 && person.country.equals("UK") || person.age() >= 21 && person.county.equals("US")); ... if(canDrinkAlcohol) { ... } |
或者什么