AUTOSAR C++14 Rule A13-2-3

Оператор отношения должен возвратить булево значение.

Описание

Управляйте определением

Оператор отношения должен возвратить булево значение.

Объяснение

Возвращаемое значение от операторов отношения Библиотеки Стандарта C++ может непосредственно проверяться, чтобы видеть, является ли отношение TRUE или FALSE. Перегрузки оператора отношения должны быть сопоставимы с этим использованием. В противном случае пользователи перегруженного оператора отношения могут видеть неожиданные результаты. Смотрите пример ниже.

Реализация Polyspace

Средство проверки отмечает перегрузки операторов отношения, которые не возвращают значение типа bool.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

развернуть все

class aClass {
    int val;
public:
    aClass(int initVal) {
        val = initVal;
    }
    bool operator<=(aClass const& comparingObj )  noexcept{ //Compliant
        return(this->val <= comparingObj.val);
    }
    int operator>=(aClass const& comparingObj ) noexcept { //Noncompliant
        return(this->val <= comparingObj.val? -1:1);
    }
};

void func() {
    aClass anObj(0), anotherObj(1);
    if(anObj <= anotherObj) {
        /* Do something */
    }
    if(anObj >= anotherObj) {
        /* Do something else */
    }
}

В этом примере, перегрузке operator<= возвращает булево значение, но перегрузку operator>= не возвращает булево значение. Однако в функциональном func, операторы <= и >= используются, как будто булево значение возвращено от перегруженных операторов. Поскольку перегрузка operator>= не возвращает нуль значения, второй if оператор всегда верен, результат, который вы не можете ожидать.

Проверяйте информацию

Группа: Перегрузка

Введенный в R2020a