メインコンテンツ

MISRA C++:2008 Rule 7-5-3

A function shall not return a reference or a pointer to a parameter that is passed by reference or const reference

説明

ルール定義

A function shall not return a reference or a pointer to a parameter that is passed by reference or const reference 1

根拠

パラメーターが参照によって関数に渡される場合、実装によっては、このパラメーターの代理として一時オブジェクトが関数に導入される可能性があります。このパラメーターへの参照またはポインターを返すと、一時オブジェクトへの参照またはポインターを返すことになる可能性があります。この一時オブジェクトの有効期間は関数とともに終わるので、このオブジェクトへのポインターまたは参照にアクセスすると、未定義の動作につながる可能性があります。

Polyspace 実装

参照渡しされる関数パラメーターへのポインターまたは参照が返される場合、ルール チェッカーは違反を報告します。

トラブルシューティング

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

すべて展開する

int * multiply_by_factor (int &val, int factor) {
    val = val * factor;
    return &val; //Noncompliant
}

void multiply_by_factor_compliant (int &val, int factor) {
    val = val * factor; //Compliant
}

const int & divide_by_factor (int &val, const int &factor) {
    val = val / factor;
    return factor; //Noncompliant
}

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

  • 関数 multiply_by_factor は、参照渡しされる値へのポインターを返します。

  • 関数 divide_by_factor は、const 参照で渡されるパラメーターへの参照を返します。

Polyspace は、これらの関数の return ステートメントに対して違反を報告します。関数 multiply_by_factor_compliant は何も返さないので、この関数はこのルールに準拠しています。

チェック情報

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

バージョン履歴

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.