lnt-assignment-equality

变量在布尔上下文中被赋予了常量值。

采用常量的赋值表达式的计算结果始终为常量值。 可能有意改为了使用比较运算(例如 ==!=)。

在 Visual Studio 2022 中,lnt-assignment-equality 检查是由 C/C++ 代码样式选项中的“意外赋值”设置控制的。 有关如何更改此设置的信息,请参阅配置 Linter

在 Visual Studio 2019 中,lnt-assignment-equality 检查由 C/C++ 代码样式选项中的“赋值而非等号”设置控制。 有关如何更改此设置的信息,请参阅配置 Linter

示例

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.
}

如何解决此问题

Linter 建议的解决方法是将赋值运算符更改为相等运算符。

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.
}

请参阅

适用于 C++ 的 IntelliSense 代码 Linter 概述