ベストアンサー
sizeof(E)が必要だとすると、Eは列挙型です:
状況によって異なります基になる型について。通常はintですが、enum class
を使用する場合は、C ++で指定できます。いずれにせよ、sizeofは正しい値を与える必要があります。
Cの列挙数を決定するための標準的な方法や組み込みの方法はありません。またはC ++。規律があり、ギャップがない場合は、次のようなものを使用できます。最初の列挙型を除くすべての列挙型は、前の列挙型より1つ高くする必要があります:
enum Days { Monday, Tuesday, … Saturday, LAST };
ここで、日数はLASTのint値と同じですが、もちろんLASTが実際に最後であることを確認する必要があります。コンパイラはこれを強制できません。
ゼロから開始しないが、何らかの理由でたとえば7から開始する場合は、LASTを計算できます-月曜日:
enum Days { Monday = 7, Tuesday, … Saturday, LAST };
int numDays = LAST - Monday; // still yields 7
ここで、月曜日が最初になります。
回答
列挙型(列挙型の略)はある種の意味を数字に加えるためのテクニック。コンピュータは数字のみで動作するように制限されており、列挙では、それらの数字が量ではなく質を表しているように見せかけることができます。
最も有名な列挙の1つは、テキストの保存に使用するエンコーディングです。アイデアは、子供向けの本が数値コードを書くのと同じように、私たちの手紙のそれぞれに番号を割り当てることです。使用するコードは次のようになります。
A = 65、B = 66、C = 67、… Z = 90; a = 97、b = 98、c = 99、… z = 122。
Windowsマシンを使用している場合は、次のことを試してください。テキストを入力できる場所をクリックします。Altキーを押したままにします。キーを押しながら、テンキーにこれらの数字の1つを入力します。たとえば、[Altキーを押したまま] 65 [Altキーを離します]。文字Aが表示されます。これは、文字を直接入力する非常に古い方法です。数字コード。適切なキーボードがインストールされていない場合に国際文字を入力するのに主に役立ちます。Çüéâäàåçê…は、Alt + 128、129、130などから取得したものです。これは公開する方法です。基礎となる文字の列挙。
Aを意味する65という数字を選択したことに魔法はありません。重要なのは、一貫性があることだけです。したがって、列挙型は、数値以外のアイデアに番号を割り当て、コードの操作を少し簡単にする方法です。
気をつけてください、文字の順序がアルファベット順(少なくとも英語では)と一致していると便利です。これにより、数値をだまして比較を使用できるため、アルファベット順に並べ替える文字列の並べ替えを簡単に記述できます。他の言語では、文字に割り当てられた数値が常にアルファベット順と一致するとは限らないため、少し注意が必要です。
別の列挙型の例として、処理するプログラムを作成していると仮定します。ネットワーク接続の場合。ネットワーク接続にはいくつかの異なる状態があります。リスニング、オープン、クローズ、またはエラー状態。これらは量ではなく質であり、それが列挙型の目的です:
enum ConnectionState {
NCON\_LISTEN,
NCON\_OPEN,
NCON\_CLOSED,
NCON\_ERROR
};
私の意見では、通常、列挙型をクラス定義内に埋め込む方が適切です。これにより、プレフィックスをスキップできます:
class Connection {
public:
enum State {
LISTEN, OPEN, CLOSED, ERROR
};
};
タイプはConnection::State
で、値はConnection::LISTEN
、Connection::OPEN
など。これはより明確だと思います。
数値と列挙値を混合する例はそうではありません。 ” t意味があります。列挙された値はすべて文字で始まる必要があります。通常、列挙が期待される場所に数値を使用することはできません。 C ++コンパイラは、intと列挙型を異なる型として扱います。列挙型に意味のある数値を関連付けることは禁止されていませんが(アルファベット順での有用性に注意してください)、デフォルトの方法ではありません。
列挙型を出力または入力できますか?もちろん可能です。 、ただし、これはカスタムタイプであるため、独自の>>および<算子を作成する必要があります。同等の整数値を出力するか、一致する文字列との間で変換するコードを作成できます。列挙型のテキスト。ただし、これをサポートするのは簡単ではありません。