EN JP CN

CL.ASSIGN.VOID

CL.ASSIGN.VOID

代入演算子 = で返される void

これは、代入演算子のパラメータータイプの選択で、制約がある、または上手くない可能性を通知するクラスレベル (CL) のチェッカーです。クラスレベルのチェッカーは有効な C++ のための Scott Meyer 規則クラス構築に基づいて推奨を通知します。

CL.ASSIGN.VOID チェッカーは、void を返す代入演算子を含むクラスを検出します。このような戻り値の型が使用されると、言語構築によっては表現できない場合があります。これらの言語構築が望ましいかそうでないかは議論の余地がありますが、以下の基本テンプレートに従えば、型によらずに言語の一貫性を維持できることが保証されます。

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

脆弱性とリスク

この設計では脆弱になることはありませんが、精通していないプログラマーが、"動作はする" が互換性のない言語構築を使用しようと試みて、(C++ コンパイラ出力の通常の複雑度の) ほとんど意味のないコンパイラからの警告に直面するリスクはあります。

脆弱コード例

     
1    class C{
//...
2    public:
3      C(int);
4      void operator=(const C&);
//...  
5    }; 

この例では、Klocwork は 4 行目で CL.ASSIGN.VOID エラーを検出します。Klocwork の警告に基づいてコードを見直せば、制約のある設計を回避することができます。

修正コード例

     
1    class C{
//...
2      C& operator=(const C&);
//...  
3    }; 

修正したコード例では、コードは void を返すことを回避し、クラス構築規則に基づいてコンパイルされます。