почему перекрывающиеся сравнения всегда оцениваются как истинные в следующих - PullRequest
0 голосов
/ 04 октября 2018

Я не понимаю, почему в следующем коде есть предупреждение о том, что перекрывающиеся сравнения всегда оценивают как истинные.Следующие операторы никогда не выполняются.

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 голосов
/ 04 октября 2018

Предполагая, что QT::DisplayRole и QT::EditRole имеют разные значения (иначе зачем вам сравнивать оба?), Тогда давайте подумаем об этом ...

Если role равноодному, то оно должно не быть равным другому.Следовательно, одно из двух условий будет выполнено.А поскольку это ИЛИ, это означает, что все выражение будет истинным.

Единственный случай, когда этого не произойдет, - QT::DisplayRole == QT::EditRole.Вы имели в виду использовать AND (&&) вместо OR?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...