MISRA C ++:2008 правил 4-5-1

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

Описание

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

Выражения с типом 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