メインコンテンツ

MISRA C++:2008 Rule 5-2-11

The comma operator, && operator and the || operator shall not be overloaded.

説明

ルール定義

The comma operator, && operator and the || operator shall not be overloaded. 1

根拠

演算子をオーバーロードすると、オーバーロードされた演算子は関数呼び出しとして動作します。コンマ演算子、&& 演算子、および || 演算子には、オーバーロードされた場合には複製できない特定の動作があります。たとえば、コンパイラは組み込みの && 演算子または || 演算子のショートサーキットを行う場合があります。ただし、オーバーロードされたこれらの演算子を使用している場合、このようなショートサーキットを行えません。

これらの演算子をオーバーロードすると、演算子の動作に関して混乱が生じます。コンマ演算子、&& 演算子、|| 演算子のオーバーロードは避けてください。

Polyspace 実装

Polyspace® は、次の演算子のオーバーロードにフラグを設定します。

  • コンマ演算子

  • && 演算子

  • || 演算子

トラブルシューティング

ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。

すべて展開する

class flag{/**/};
class Util
{
public:
flag getValue ( );
flag setValue ( int const & );
};

bool operator && ( flag const &, flag const & ); // Noncompliant
void f2 ( Util & in3, Util & in4 )
{
in3.getValue ( ) && in4.setValue ( 0 ); // Both operands evaluated
}


この例では、&& 演算子が flag クラスに対してオーバーロードされています。f2() では、オーバーロードされた演算子が使用されます。オーバーロードにより、ショートサーキットが妨げられます。オーバーロードされた演算子は、予期しない動作を示す可能性があります。Polyspace は、&& 演算子のオーバーロードにフラグを設定します。

チェック情報

グループ: Expressions
カテゴリ: 必要

バージョン履歴

R2013b で導入


1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.

The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:

  • MISRA C:2004

  • MISRA C:2012

  • MISRA C:2023

  • MISRA C++:2008

  • MISRA C++:2023

MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.