メインコンテンツ

AUTOSAR C++14 Rule A3-1-6

Trivial accessor and mutator functions should be inlined

説明

ルール定義

Trivial accessor and mutator functions should be inlined.

根拠

インライン関数は関数呼び出しの実行時オーバーヘッドを回避できますが、コードが増大する可能性があります。アクセサー (getter) メソッドまたはミューテーター (setter) メソッドはトリビアルであり、コードの増大は問題になりません。このようなメソッドは、不要な関数呼び出しオーバーヘッドを避けるためインラインにできます。また、クラス定義の内部と外部で複数の構文要素の繰り返しを避けることもできます。

クラス内部で定義されるメソッドは暗黙的にインライン メソッドと見なされます。クラス外部のメソッドは、inline キーワードを使用することにより明示的にインラインにできます。

Polyspace 実装

メソッドがトリビアルかどうかを判断するため、チェッカーでは以下の条件を使用します。

  • アクセサー メソッドは、パラメーターがなく、非静的データ メンバーまたは非静的データ メンバーへの参照を返す 1 つの return ステートメントを含む場合、トリビアルです。

    メソッドの戻り値の型は、データ メンバーの型と正確に一致するか、その型への参照でなければなりません。

  • ミューテーター メソッドは、戻り値の型が void で、パラメーターが 1 つ、非静的データ メンバーにパラメーターを代入する 1 つの代入ステートメントを含む場合、トリビアルです。

    パラメーター型は、データ メンバーの型と正確に一致するか、その型への参照でなければなりません。

チェッカーは、inline キーワードが付いていないクラス外部で定義されたトリビアル アクセサー メソッドとミューテーター メソッドにフラグを設定します。

チェッカーは、テンプレート メソッドやバーチャル メソッドにはフラグを設定しません。

トラブルシューティング

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

すべて展開する

class PhysicalConstants {
    public:
       double getSpeedOfLight() const;
       void setSpeedOfLightInMedium(double newSpeed);
       double getRefractiveIndexGlass() { //Compliant
           return refractiveIndexGlass;
       }
    private:
       double speedOfLight;
       double refractiveIndexGlass;
};

double PhysicalConstants::getSpeedOfLight() const{ //Noncompliant
    return speedOfLight;
}

void PhysicalConstants::setSpeedOfLightInMedium(double newSpeed) {//Noncompliant
    speedOfLight = newSpeed;
}

この例では、アクセサー メソッド getSpeedOfLightgetRefractiveIndexGlass がトリビアルです。getSpeedOfLight メソッドはクラス外部で定義されており、非準拠です。getRefractiveIndexGlass メソッドはクラス定義内部で定義されており、ルールに準拠しています。

トリビアル ミューテーター メソッド setSpeedOfLightInMedium もクラス定義外部で定義されており、ルールに違反しています。

チェック情報

グループ: 基本概念
カテゴリ: Advisory、Automated

バージョン履歴

R2020b で導入