AUTOSAR C++14 Rule A8-4-7
"in" parameters for "cheap to copy" types shall be passed by value
説明
ルール定義
"コピーの負担が少ない" 型の "in" パラメーターは値渡しするものとします。
根拠
関数内でパラメーターの読み取りのみを行う場合、"in" パラメーターを使用します。コピーの負担が少ないパラメーターの場合は、次の目的でパラメーターを値で渡します。
- パラメーターを変更する予定がないことを明確にする。 
- パラメーターを参照で渡す場合に、関数からパラメーターにアクセスするために必要となる追加の間接参照を回避する。 
パラメーターのコピーの負担が少なくなるのは、次の両方の条件が当てはまる場合です。
- パラメーターのサイズが 2 ワード以下である。たとえば、パラメーター - foo、- sizeof(foo) <= 2 * sizeof(int)などです。
- パラメーターがトリビアル コピー可能な型である。"is_trivially_copyable" を参照してください。 
Polyspace 実装
- Polyspace® は、以下に対してフラグを設定します。 - パラメーターのコピーの負担が少ない場合 ( - sizeof <= 2 * sizeof(int)およびトリビアル コピー可能) に参照渡しされる- constパラメーター。
- パラメーターのコピーの計算量が多い場合に値渡しされる - constパラメーター。たとえば、このコードの抜粋では、パラメーター- str(コピーの計算量が多い) と- b(非トリビアル コピー可能) の両方が非準拠です。- void func1(const std::string str); struct B { B(B const&) {} }; void func2(const B b);
 
- Polyspace は以下に対してフラグを設定しません。 - コピーの計算量が多く、関数内で変更されていない場合に、参照渡しされる非 - constパラメーター。Polyspace はこれらのパラメーターを "in" パラメーターと見なします。
- 移動のみの型である場合に参照渡しされる "in" パラメーター。たとえば、 - int f(const std::unique_ptr<int>& p);です。
- コピー コンストラクターで参照渡しされる - constパラメーター。たとえば、このコードの抜粋では、- pointに対して欠陥は報告されません。- class coord { public: coord(int x, int y) {p_x = x; p_y = y;} coord(const coord& point) { p_x = obj.p_x; p_y = obj.p_y;} //... private: int p_x, p_y; }; coord point{1, 1}; void func(const coord& point);
 
トラブルシューティング
ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: 宣言子 | 
| カテゴリ: Required、Automated |