Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Переменной присваивается константа в логическом контексте.
Выражение присваивания, принимающее константу, всегда вычисляется как значение константы. Возможно, вместо этого предполагалась операция сравнения, например ==
или !=
.
В 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.
}