メインコンテンツ

AUTOSAR C++14 Rule M7-3-4

Using-directives shall not be used

説明

ルール定義

using-directives shall not be used.

根拠

using 命令は、意図したより多くの変数を名前ルックアップに公開する可能性があります。名前ルックアップのスコープが広いほど、変数が意図せず使用される可能性が高まります。次に例を示します。

namespace NS {
    int i;
    int j;
}
using namespace NS;
この場合、NS::iNS::j の両方が名前ルックアップに公開されますが、使用する予定なのはいずれか 1 つの変数のみである場合があります。

使用する予定の変数のみを公開するか、変数を使用するときに完全修飾名で参照することをお勧めします。たとえば、前の例で変数 NS::i を使用する場合は、次のようにこの変数のみを名前ルックアップに公開します。

using NS::i;
または、すべてのインスタンスで i の代わりに NS::i を参照します。

Polyspace 実装

ルール チェッカーは、using 命令に対する違反を報告します。これらの命令では、キーワード using の後ろにキーワード namespace と名前空間の名前が続きます。using 命令は、名前空間のすべてのメンバーを現在のスコープで使用可能にします。

チェッカーは、using の宣言にフラグを設定しません。これらの宣言にもキーワード using が含まれていますが、キーワード namespace は含まれていません。using の宣言では、名前空間の特定のメンバーだけが公開されます。

トラブルシューティング

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

すべて展開する

namespace currentDataModel {
    int nodes;
    int count;
}
using namespace currentDataModel; //Noncompliant

namespace lastDataModel {
    int nodes;
    int count;
}
using lastDataModel::count; //Compliant

この例では、名前空間 currentDataModel のすべてのメンバーを公開する using 命令がルール違反になります。

チェック情報

グループ: 宣言
カテゴリ: Required、Automated

バージョン履歴

R2019a で導入