整数转布尔型的奇怪语法

42 浏览
0 Comments

整数转布尔型的奇怪语法

这个问题已经有了答案

C++书籍指南和列表

我开发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.

我知道这个布尔值从刚才扫描的整数中被赋值,但我不明白(*!= 0)的细节。有人能解释一下为什么这个比我更懂语言的人要这样写吗?

admin 更改状态以发布 2023年5月19日
0
0 Comments

表达式(i != 0)的求值结果是一个布尔值。如果表达式为真(即i非零),则它的值是true,否则是false

然后将这个值赋给b

如果你喜欢简洁而不是明确,你也可以用b = i; 获得相同的结果,这是由于标准的布尔类型转换,对于零赋值false,非零赋值true

或者,如果你喜欢冗长,你可以使用b = (i != 0) ? true : false;

0
0 Comments

在这里阅读一下:http://en.cppreference.com/w/cpp/language/operator_comparison

操作符"!="的结果是布尔值。所以,这个人是在说“比较'i'中的值与0”。如果'i'不等于0,则'!='返回true。

因此,实际上,b中的值为“如果'i'不为零,则为true。”

编辑:根据OP对此的评论,如果使用任何其他返回bool的运算符,您也可以遇到类似的情况。当然,当与int类型一起使用时,'!='意味着负数将评估为true。如果使用“> 0”,则0和负数都将评估为false。

0