Поделиться через


lnt-assignment-equality

Переменной присваивается константа в логическом контексте.

Выражение присваивания, принимающее константу, всегда вычисляется как значение константы. Возможно, вместо этого предполагалась операция сравнения, например == или !=.

В Visual Studio 2022 проверка lnt-assignment-equality контролируется настройкой Случайное присваивание в параметрах стиля кода C/C++. Сведения о том, как изменить этот параметр, см. в разделе Настройка анализатора кода.

В Visual Studio 2019 проверка lnt-assignment-equality контролируется настройкой Присваивание вместо равенства в параметрах стиля кода C/C++. Сведения о том, как изменить этот параметр, см. в разделе Настройка анализатора кода.

Примеры

int read();

void accidental_assignment(int i)
{
    if (i = 2) {}       // Flagged: 'i' is being assigned to a constant.

    if (i = read()) {}  // OK: 'i' is being assigned the result of a function call.

    while (i = 0) {}    // Flagged.
}

Устранение проблемы

Исправление, предлагаемое анализатором кода, — заменить оператор присваивания на оператор равенства.

void accidental_assignment(int i)
{
    if (i == 2) {}

    while (i != 0) {}
}

Замечания

Эта проверка помечает только присваивание из константы или константного выражения.

Известные проблемы

void known_issues(bool b) {
    if (b = true) {}  // Not flagged because there is no implicit conversion to bool.
}

См. также

Обзор анализатора кода IntelliSense для C++