メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

MISRA C++:2008 Rule 7-1-2

A pointer or reference parameter in a function shall be declared as pointer to const or reference to const if the corresponding object is not modified

説明

ルール定義

A pointer or reference parameter in a function shall be declared as pointer to const or reference to const if the corresponding object is not modified 1

根拠

関数シグネチャのベスト プラクティスは、パラメーターでオブジェクトを関数に渡した場合に、そのオブジェクトが変更されるかどうかを明確に伝えることです。次の関数シグネチャについて考えます。

void foo(const in&);
void bar(int&);
ここでは、foo()const の参照として整数を受け入れます。これにより、入力参照が foo() によって変更されないことが明確に伝わります。bar() のシグネチャからは、入力参照が変更されるかどうかが明確ではありません。

このルールに準拠するには、名前付きポインターまたは参照パラメーターの型を const で修飾します。例外として、一連のオーバーライド関数のうちのいずれかによってパラメーターが変更される場合、このルールは適用されません。

Polyspace 実装

チェッカーは、基になるオブジェクトが関数本体で変更されない場合、const でないポインター パラメーターにフラグを設定します。

ポインター パラメーターが const でない参照またはポインターとして別の関数に渡される場合、チェッカーは、そのパラメーターは変更される可能性があると想定します。このようなパラメーターは違反として報告されません。

トラブルシューティング

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

すべて展開する

この例では、パラメーター *b および *c が関数内で変更されず、const として修飾されていません。Polyspace は、このルールに対する違反を報告します。

void sum(int *a, int *b, int *c, const int *d) { //Noncompliant 
	*a = *b + *c + *d;

}

チェック情報

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

バージョン履歴

R2018a で導入

すべて展開する


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.