CWARN.NOEFFECT.SELF_ASSIGN

无效的自赋值

CWARN.NOEFFECT.SELF_ASSIGN 检查器可标记其中对应于一个变量的表达式赋值给自身的实例。

漏洞与风险

自赋值没有任何效果,因此可能无法达到设计意图。即使这不是一个错误,自赋值也可能预示代码中将出现更大的错误。

漏洞代码示例 1

复制
  class A {
      int x;
    public
      A() : x(x) {} 
  };

Klocwork 标记了第 4 行,其中发生自我赋值。

修正代码示例 1

复制
class A {
    int x;
  public
    A(int x) : x(x) {} 
};

在该修正代码示例中,自赋值表达式正确。

漏洞和修正代码示例 2

复制
  class A {
      int i;
      char c;
      bool b;
    public
      A(int i, char c) {
        this->i = i;   
        this->c = c;  
        this->b = b;  
     }  
 };

在此示例中,Klocwork 标记了第 9 行,该行展示了自赋值,但是未标记第 7 和 8 行,因为这两行的赋值表达式正确。