以下に示すようなクラス宣言内で定義された場合のstatic enum
定義とenum
定義の違いは何ですか?
class Example
{
Example();
~Example();
static enum Items{ desk = 0, chair, monitor };
enum Colors{ red = 0, blue, green };
}
また、クラスで型を定義しているので、それらを何と呼びますか?同様に、クラスで変数を定義する場合、それをメンバー変数と呼びます。
static
はenum
宣言に適用できないため、コードは無効です。
N3337以降、§7.1.1/ 5[dcl.stc]
static
指定子は、変数と関数の名前と匿名の共用体にのみ適用できます...
enum
宣言はそれらのどれでもありません。
enum
のインスタンスを作成し、必要に応じてstatic
にすることができます。
class Example
{
enum Items{ desk = 0, chair, monitor };
static Items items; // this is legal
};
この場合、items
は他の 静的データメンバー と同じです。
これは MSVCバグ ;です。リンクされたバグレポートから、コンパイラはstatic
宣言でregister
とenum
の両方のストレージ指定子を許可するようです。バグは修正済みとしてクローズされているため、VS2015で修正が利用可能になる可能性があります。
static
はC++ストレージ指定子です。これは、クラスのこのメンバーの値がクラスのすべてのインスタンスで同じであることを意味します。ここでは列挙型について特別なことは何もありません。
編集:static
タグのwikiにも説明があります。まさにこのトピックについて。
EDIT2:ああ、私はあなたのコードを誤解しました。静的な列挙型はありません。値を保持する列挙型の静的変数を持つことができます。