首页 > 解决方案 > 逻辑运算符作为回报

问题描述

我在程序中有一个函数应该返回一个 int,但返回看起来像这样:

return wordlength > 6.0 &&  wordlength< 9.0
       && strcasestr (string, "substring1") && strcasestr (string, "substring2")
       && strcasestr (string, "substring2") && strcasestr (string, "substring4")

wordlength 是一个双精度值,包含字符串中单词的平均长度。

我的问题是 return 语句实际上返回了什么?

标签: creturnlogical-operators

解决方案


运算符优先级规则表示关系运算符<优先于&&. 因此子表达式wordlength > 6.0 && wordlength< 9.0等价于(wordlength > 6.0) && (wordlength< 9.0)

整理好之后,请注意它&&具有从左到右的关联性。这意味着如果在同一个表达式中存在多个具有相同优先级的相同运算符,例如a && b && c,则它等价于(a && b) && c

逻辑运算符 like&&具有“短路”评估顺序。这意味着在 中0 && b,只有操作数0被评估/执行。请参阅是否强制使用短路逻辑运算符?和评价顺序?

最后,C 中的逻辑表达式不会产生布尔类型(如在 C++ 中),而是产生int1or 0。即使类型是int,这也可以认为它是类型bool,并且您可以安全地编写诸如bool b = x && y;.


推荐阅读