AUTOSAR C++14 Rule A5-16-1

Троичный условный оператор не должен использоваться в качестве подвыражения.

Описание

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

Троичный условный оператор не должен использоваться в качестве подвыражения.

Объяснение

Троичный условный оператор, используемый в качестве подвыражения, делает полное выражение менее читаемым и трудным обеспечить. Часто визуально более ясно, присваиваете ли вы результат тернарного оператора к переменной и затем используете переменную в последующих операциях.

Реализация Polyspace

Средство проверки отмечает использование троичного условного оператора в подвыражениях за некоторыми исключениями. Исключения включают использование оператора когда:

  • Результат присвоен переменной.

  • Результат используется в качестве аргумента функции или возвращается в функцию.

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

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

Примеры

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

#include <cstdint>
const int ULIM = 100000;

std::int32_t foo(int32_t x) {
    int ret;
    ret = (x <= 0? 0: (x >= ULIM? 0 : x)); //Noncompliant
    return ret;
}

std::int32_t bar(int32_t x) {
    int ret, retInterim;
    retInterim = x >= ULIM? 0 : x; //Compliant
    ret = retInterim <= 0? 0 : retInterim; //Compliant
    return ret;
}

В этом примере, в foo, троичная условная операция объединена в цепочку со второй операцией, чтобы возвратить значение 0 если x находится в области значений [0, ULIM] и возвратите x в противном случае. Троичная операция, сравнивающая x с ULIM подвыражение в полной цепи и нарушает правило.

В bar, каждая троичная условная операция написана в отдельном шаге и не нарушает правило. В качестве альтернативы тот же алгоритм может быть реализован путем объединения условий с булевой операцией И и использования одной троичной условной операции.

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

Группа: Выражения

Введенный в R2019a