MISRA C++:2008 Rule 4-5-1

Выражения с типом bool не должны использоваться как операнды для встроенных операторов, кроме оператора назначения =, логических операторов &, ||,!, операторов равенства = = и! =, унарного & оператора и условного оператора

Описание

Определение правила

Выражения с типом bool не должны использоваться как операнды для встроенных операторов, кроме оператора назначения =, логических операторов &, ||,!, операторов равенства = = и! =, унарного оператора и условного оператора.

Объяснение

Операторы, кроме таковых, упомянутых в правиле, не дают значимых результатов с bool операнды. Использование bool операнды с этими операторами могут указывать на ошибки программирования. Например, вы намеревались использовать логический оператор || но использовал побитовый оператор | вместо этого.

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

Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».

Примеры

расширить все

void boolOperations() {
    bool lhs = true;
    bool rhs = false;
    
    int res;
    
    if(lhs & rhs) {} //Noncompliant
    if(lhs < rhs) {} //Noncompliant
    if(~rhs) {}      //Noncompliant
    if(lhs ^ rhs) {} //Noncompliant
    if(lhs == rhs) {} //Compliant
    if(!rhs) {}       //Compliant
    res = lhs? -1:1;  //Compliant  
}

В этом примере bool операнды не нарушают правило при использовании со ==, ! и ? операторы.

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

Группа: Стандартные Преобразования
Категория: Требуемая
Введенный в R2013b