AUTOSAR C++14 Rule A2-10-1
An identifier declared in an inner scope shall not hide an identifier declared in an outer scope
説明
ルール定義
An identifier declared in an inner scope shall not hide an identifier declared in an outer scope.
根拠
このルールは、2 つの変数宣言で同じ識別子名が使用されていて、そのうちの一方が外側のスコープにあり、もう一方が内側のスコープにある状況にフラグを設定します。
int var;
...
{
...
int var;
...
}内側のスコープ内での名前の使用はすべて、内側のスコープで宣言された変数を参照します。しかし、開発者またはコード レビュー担当者が、その使用法で参照されるのは外側のスコープで宣言された変数だという誤った想定をする可能性があります。このルールによってフラグが設定されるすべてのケースにおいて、スコープ解決演算子を使用して使用法をさらに明確にすることはできません。
Polyspace 実装
ルール チェッカーは、以下の場合を除く、変数のシャドウイングのすべてのケースにフラグを設定します。
外側と内側の両方の名前付き名前空間に同じ識別子名が使用されている。
クラスのデータ メンバーとクラスの外にある変数に同じ名前が使用されている。
基底クラスと派生クラスのメソッドに同じ名前が使用されている。
チェッカーは、外側のスコープ内の変数宣言が内側のスコープ内の変数宣言の "後で" 出現するケースにもフラグを設定します。このようなケースでは、変数は隠されませんが、変数名の再利用によって開発者が混乱する可能性があります。
このルールでは、これらの状況にフラグが設定されません。これは、変数の使用法が内側のスコープ内の変数と外側のスコープ内の変数のどちらを参照しているかを明確にできるためです。以下に例を示します。
int var;
namespace n1 {
int var;
}n1 では、内側のスコープ内の変数は n1::var として、グローバル変数は ::var として参照できます。ルール チェッカーは以下の問題も検出しません。
無名の名前空間内の変数が外側のスコープ内の別の変数を隠している。
ラムダ式に対してローカルな変数がキャプチャされた変数を隠している。
トラブルシューティング
ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: 構文規則 |
| カテゴリ: Required、Automated |
バージョン履歴
R2019a で導入