☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

赋值运算符左右子表达式不应相同

10.3.4 ID_selfAssignment
目录 › next › previous

左右子表达式相同的赋值表达式不改变对象的值,往往是笔误或残留代码。

示例:

a = a;       // Non-compliant
a = b = a;   // Non-compliant

有时这种代码被用来消除编译警告,编译器可能会报出没有被用到的参数,将参数赋值给自身可去除警告,但这并不是一种好方法,引入了没有实际意义的代码,改进方法可参见 ID_paramNotUsed。

有时为了设置调试断点,但又找不到合适的位置,可以增加这种代码作为断点,但这种非正式的代码不应被保留。

又如:

class A {
    int a;
public:
    A(int a) { a = a; }   // Non-compliant, ‘a’ is not the member
};

例中对成员 a 的赋值是无效的,如果是为了初始化则应在构造函数的成员初始化列表中完成,还应避免参数与成员重名。

参考

CWE-682
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.