メインコンテンツ

AUTOSAR C++14 Rule A7-2-4

In an enumeration, either (1) none, (2) the first or (3) all enumerators shall be initialized

説明

ルール定義

列挙では、(1) どの列挙子も初期化しないか、(2) 最初の列挙子のみを初期化するか、(3) すべての列挙子を初期化するものとします。

根拠

列挙では、1 つ以上の列挙子に明示的に値を代入し、コンパイラーに残りの値を推定させることができます。ただし、明示的な代入と暗黙的な代入を混在させると、開発者やコード レビュー担当者が混乱する可能性があります。

Polyspace 実装

一部の列挙子に明示的な値が代入されている場合、ルール チェッカーは列挙の定義に対して違反を報告します。ただし、次の場合は例外です。

  • 最初の列挙子に明示的な値が代入されている。

  • すべての列挙子に明示的な値が代入されている。

トラブルシューティング

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

すべて展開する

#include <cstdint>

enum class mapEvents: std::uint32_t //Noncompliant
{
   ADD,
   REMOVE,
   MOVE = 10,
   COPY
};

enum class vectorEvents: std::uint32_t //Compliant
{
   ADD = 1,
   REMOVE = 2,
   MOVE = 3,
   COPY = 4
};

enum class listEvents: std::uint32_t //Compliant
{
   ADD,
   REMOVE,
   MOVE,
   COPY
};

enum class setEvents: std::uint32_t //Compliant
{
   ADD = 1,
   REMOVE,
   MOVE,
   COPY
};

この例では、列挙 mapEvents の定義がルールに準拠していません。複数の列挙子のうちの 1 つだけに明示的に値が代入されていて、その列挙子が最初の列挙子ではないためです。

以下の列挙の定義は準拠しています。

  • vectorEvents は、すべての列挙子に明示的に値が代入されているため、準拠しています。

  • listEvents は、明示的に値が代入されている列挙子がないため、準拠しています。

  • setEvents は、最初の列挙子だけに明示的に値が代入されているため、準拠しています。

チェック情報

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

バージョン履歴

R2019a で導入