1. ホーム
  2. c++

[解決済み] enumと強い型付けenumの比較

2023-07-05 07:29:11

質問

私はC++プログラミングの初心者です。

今日、私は新しいトピックに出会いました。 enum . 私はそれを少し調査しましたが、今のところ、なぜこれが必要なのか、同じものの用途は何なのか、見つけることができません。

たとえば、私たちが持っている場合。

enum xyz{a, b, c};
/*a = 0, b = 1, c = 2, (Typical C format)*/

なぜ、書く必要があるのか。

enum class xyz{a, b, c};

ここで何をしようとしているのか? 私の最も重要な疑問は、それをどのように使用するかです。 小さな例を示していただければ、理解できると思います。

どのように解決するのですか?

OK、最初の例: 旧式の列挙型は独自のスコープを持ちません。

enum Animals {Bear, Cat, Chicken};
enum Birds {Eagle, Duck, Chicken}; // error! Chicken has already been declared!

enum class Fruits { Apple, Pear, Orange };
enum class Colours { Blue, White, Orange }; // no problem!

第二に、これらは暗黙のうちに積分型に変換されるため、おかしな挙動になる可能性があります。

bool b = Bear && Duck; // what?

最後に、C++11 の列挙型の基礎となる積分型を指定することができます。

enum class Foo : char { A, B, C};

以前は、基礎となる型が指定されていなかったため、プラットフォーム間で互換性の問題が発生する可能性がありました。 編集 コメントで指摘されていますが、C++11 では "古いスタイルの enum の基礎となる積分型を指定することもできます。