You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么将int与enum比较时,重叠比较表达式的计算结果恒为真?

为什么判断恒为真

这个警告是逻辑运算符误用导致的,||(逻辑或)的规则是只要任意一个子条件为真,整个表达式结果就为真。

你写的判断someProtocolValue != protocol::tls || someProtocolValue != protocol::wss对所有可能的取值来说都永远成立:

  • 如果变量值是tls(对应2):满足「不等于wss」,整个表达式为真
  • 如果变量值是wss(对应4):满足「不等于tls」,整个表达式为真
  • 如果变量值是其他整数/枚举值:两个条件都满足,表达式依然为真

所以这个if判断等于没有写过滤条件,里面的代码永远都会执行,编译器才会抛出这个警告。

修复方法

你应该是要实现变量既不是tls也不是wss时才执行内部代码的逻辑,两种正确写法:

  1. 把逻辑或改成逻辑与&&:
if(someProtocolValue != protocol::tls &&
   someProtocolValue != protocol::wss) {
    // Do work
}
  1. 先匹配要排除的场景再整体取反,可读性更高:
if(!(someProtocolValue == protocol::tls ||
     someProtocolValue == protocol::wss)) {
    // Do work
}

内容的提问来源于stack exchange,提问作者jeffbRTC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 00:15:03