CL.ASSIGN.VOID

赋值运算符 = 中返回的 void

这是一个类级别 (CL) 检查器,可就赋值运算符的参数类型,告知您潜在的限制或不明智的设计选择。类级别检查器会根据 Scott Meyer 的高效 C++ 规则类构造来生成建议。

CL.ASSIGN.VOID 检查器可查找包含赋值运算符的类,这些运算符返回 void。使用这种返回类型时,将无法表达某些语言结构。无论这些语言结构是否需要,或是否具有争议,遵循下面的基本模板,以在无论使用何种类型时均能保证语言的一致性:

复制
  class MyClass {
  public
    MyClass& operator=(const MyClass&);
  };

漏洞与风险

此设计选择不存在任何漏洞,但是有风险,即不熟悉的程序员将尝试使用“应该”正常工作但是不兼容的语言结构,并且还会遇到意义甚少或毫无意义的编译器警告(假定 C++ 编译器输出具有通常的复杂性)。

漏洞代码示例

复制
    class C{
//...
    public
      C(int);
      void operator=(const C&);
//...  
    }; 

在此示例中,Klocwork 在第 5 行查找到了 CL.ASSIGN.VOID 错误。Klocwork 警告允许重新评估相应代码,避免出现设计限制。

修正代码示例

复制
    class C{
//...
      C& operator=(const C&);
//...  
    }; 

在该修正代码示例中,代码避免了返回 void,并遵循类构建规则。