exponenta event banner

MISRA C++: Правило 2008 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