メインコンテンツ

MISRA C++:2008 Rule 9-3-1

const member functions shall not return non-const pointers or references to class-data.

説明

ルール定義

const member functions shall not return non-const pointers or references to class-data. 1

根拠

const オブジェクトは、初期化後に変更できず、同じく const として宣言されているクラス メンバー関数しか呼び出すことができません。これらのメンバー関数がオブジェクトの状態を変更することは想定されていません。

const メンバー関数がクラスのデータ メンバーへの非 const ポインターまたは参照を返す場合は、開発者の想定に反して、この関数によってオブジェクトの状態が変更される可能性があります。この状況を回避するには、クラス データ メンバーへの参照またはポインターを返す const メンバー関数を定義するときに、戻り値の型を const として指定します。

Polyspace 実装

const メンバー関数が非 static データ メンバーへの非 const ポインターまたは参照を返す場合にのみ、Polyspace® はこのルールの違反にフラグを設定します。このルールは、static データ メンバーには適用されません。

トラブルシューティング

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

すべて展開する

class A{
	
	private:
	
	int& rInt;
	public:
	
	int* getR() const{ //Noncompliant
		return &rInt;
	}
	
	const int* getConstR() const{ //Compliant
		return &rInt;
	}
};

この例では以下のようになります。

  • const メンバー関数 getR() は、非 const ポインターを返すため、ルールに違反します。

  • const メンバー関数 getConstR() は、const ポインターを返すため、ルールに準拠します。

チェック情報

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

バージョン履歴

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.