为什么重叠比较在以下情况中总是评估为true

时间:2018-10-04 14:59:37

标签: c++ qt

我不明白为什么以下代码会发出警告,指出重叠的比较总是评估为true。 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();
}

1 个答案:

答案 0 :(得分:2)

假设QT::DisplayRoleQT::EditRole具有不同的值(否则,为什么要将两者进行比较?)然后考虑一下...

如果role等于一个,则必须不等于另一个。因此,两个条件之一将成立。而且由于这是一个OR,因此意味着整个表达式都是正确的。

只有QT::DisplayRole == QT::EditRole不会发生这种情况。您是否要使用AND(&&)代替OR?