变量在布尔上下文中被赋予了常量值。
采用常量的赋值表达式的计算结果始终为常量值。 可能有意改为了使用比较运算(例如 == 或 !=)。
在 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.
}