c++ - 为什么重叠比较总是在以下情况下评估为真
问题描述
我不明白为什么下面的代码有警告说明重叠比较总是评估为真。Next 语句永远不会执行。
QVariant MainModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if ((role != Qt::DisplayRole) || (role != Qt::EditRole)) // always evaluates to true warning, but why?
return QVariant();
if (index.column() == 0 && index.row() < m_values.count()) // this is never executed warning
return m_values.at( index.row() );
else
return QVariant();
}
解决方案
假设QT::DisplayRole
并QT::EditRole
具有不同的值(否则为什么要与两者进行比较?)然后让我们考虑一下...
如果role
等于一个,那么它一定不等于另一个。因此,这两个条件之一将为真。由于这是一个 OR,这意味着整个表达式都是真的。
唯一不会发生这种情况的情况是 if QT::DisplayRole == QT::EditRole
。您的意思是使用 AND ( &&
) 代替 OR 吗?
推荐阅读
- javascript - 已阻止:仅当按钮具有外部图标时,如何为按钮提供额外的填充?
- r - 有没有办法解析胶水里面的变量
- typescript - 右手类型分配
- java - Android 致命异常:OS_REST_SUCCESS_CALLBACK
- arduino - 如何将 MAX30100 脉冲传感器连接到 ESP32 的不同 i2c 引脚并读取数据?
- docker - 扩展基本 alpine 镜像以添加 dot net core app (Docker)
- qt - 如果任何一个 QML 项目自行更新,QML 会重新绘制整个屏幕吗?
- spring-boot - 仅在 Intellij 调试器中检测到 Mockito 未完成的存根异常
- react-native - 在抽屉中使用本机多屏反应
- android - 颤振流显示错误类型“_TypeError”不是“字符串”类型的子类型