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