return 中的逻辑运算符
Logoical operators in return
我在程序中有一个函数应该 return 一个 int,但是 return 看起来像这样:
return wordlength > 6.0 && wordlength< 9.0
&& strcasestr (string, "substring1") && strcasestr (string, "substring2")
&& strcasestr (string, "substring2") && strcasestr (string, "substring4")
wordlength 是一个双精度值,它包含字符串中单词的平均长度。
我的问题是 return 语句实际上是什么 return?
运算符优先级规则表明 <
等关系运算符优先于 &&
。因此子表达式 wordlength > 6.0 && wordlength< 9.0
等价于 (wordlength > 6.0) && (wordlength< 9.0)
.
整理好后,请注意 &&
具有从左到右的 关联性 。这意味着如果在同一个表达式中有多个具有相同优先级的相同运算符,例如 a && b && c
,则它等同于 (a && b) && c
.
&&
等逻辑运算符的计算顺序为 "short-circuit"。意思是在0 && b
中,只有操作数0
是evaluated/executed。参见 Is short-circuiting logical operators mandated? And evaluation order?
最后,C 中的逻辑表达式不会产生布尔类型(如在 C++ 中),而是产生值 1
或 0
的 int
。即使类型是 int
,这也可以看作是 bool
类型,您可以安全地编写 bool b = x && y;
.
这样的代码
我在程序中有一个函数应该 return 一个 int,但是 return 看起来像这样:
return wordlength > 6.0 && wordlength< 9.0
&& strcasestr (string, "substring1") && strcasestr (string, "substring2")
&& strcasestr (string, "substring2") && strcasestr (string, "substring4")
wordlength 是一个双精度值,它包含字符串中单词的平均长度。
我的问题是 return 语句实际上是什么 return?
运算符优先级规则表明 <
等关系运算符优先于 &&
。因此子表达式 wordlength > 6.0 && wordlength< 9.0
等价于 (wordlength > 6.0) && (wordlength< 9.0)
.
整理好后,请注意 &&
具有从左到右的 关联性 。这意味着如果在同一个表达式中有多个具有相同优先级的相同运算符,例如 a && b && c
,则它等同于 (a && b) && c
.
&&
等逻辑运算符的计算顺序为 "short-circuit"。意思是在0 && b
中,只有操作数0
是evaluated/executed。参见 Is short-circuiting logical operators mandated? And evaluation order?
最后,C 中的逻辑表达式不会产生布尔类型(如在 C++ 中),而是产生值 1
或 0
的 int
。即使类型是 int
,这也可以看作是 bool
类型,您可以安全地编写 bool b = x && y;
.