C++ 为什么重叠比较总是在下面的示例中计算为真
我不明白为什么下面的代码有警告,说明重叠比较的结果总是正确的。Next语句永远不会执行C++ 为什么重叠比较总是在下面的示例中计算为真,c++,qt,C++,Qt,我不明白为什么下面的代码有警告,说明重叠比较的结果总是正确的。Next语句永远不会执行 QVariant MainModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); if ((role != Qt::DisplayRole) || (role != Qt::EditRole)) // always evaluates
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();
}
QVariant MainModel::data(常量QModelIndex&index,int角色)常量
{
如果(!index.isValid())
返回QVariant();
如果((角色!=Qt::DisplayRole)| |(角色!=Qt::EditRole))//总是计算为true warning,但为什么?
返回QVariant();
如果(index.column()==0&&index.row()
假设QT::DisplayRole
和QT::EditRole
具有不同的值(否则为什么要将两者进行比较?),那么让我们考虑一下
如果
角色
等于一个,则它必须不等于另一个。因此,这两个条件中有一个是正确的。因为这是一个OR,这意味着整个表达式都是真的
唯一不会发生这种情况的是
QT::DisplayRole==QT::EditRole
。您是否打算使用AND(&&
)而不是OR?假设QT::DisplayRole
和QT::EditRole
具有不同的值(否则为什么要将两者进行比较?)
如果
角色
等于一个,则它必须不等于另一个。因此,这两个条件中有一个是正确的。因为这是一个OR,这意味着整个表达式都是真的
唯一不会发生这种情况的是
QT::DisplayRole==QT::EditRole
。您是否打算使用AND(&&
)而不是OR?如果角色
等于Qt::DisplayRole
,则它不能同时等于Qt::EditRole
,因此,这些条件中至少有一个是true
true
或任何=true
。如果role
等于Qt::DisplayRole
,则它不能同时等于Qt::EditRole
(反之亦然),因此,这些条件中至少有一个是true
true
或任何=true
。