赋值运算符左右子表达式不应相同
10.3.4 ID_selfAssignment
左右子表达式相同的赋值表达式不改变对象的值,往往是笔误或残留代码。
示例:
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 的赋值是无效的,如果是为了初始化则应在构造函数的成员初始化列表中完成,还应避免参数与成员重名。