1. ホーム
  2. c++

C++のenum型データのサイズは?

2023-12-24 02:57:11

質問

これはC++の面接試験の問題で、宿題ではありません。

#include <iostream>
using namespace std;
enum months_t { january, february, march, april, may, june, july, august, september,    
  october, november, december} y2k;

 int main ()
  {
    cout << "sizeof months_t is  " << sizeof(months_t) << endl;
    cout << "sizeof y2k is  " << sizeof(y2k) << endl;
    enum months_t1 { january, february, march, april, may, june, july, august,    
       september, october, november, december} y2k1;
    cout << "sizeof months_t1 is  " << sizeof(months_t1) << endl;
    cout << "sizeof y2k1 is  " << sizeof(y2k1) << endl;
 }

出力します。

sizeof months_t は 4

sizeof y2k is 4

sizeof months_t1 is 4

sizeof y2k1 is 4

なぜサイズがすべて4バイトなのでしょうか?12 x 4 = 48 バイトではないのですか?

ユニオンエレメントが同じメモリ位置を占めるのは知っていますが、これはenumです。

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

サイズが4バイトなのは enum として格納されるためです。 int . 12個の値しかないので、本当は4ビットしか必要ないのですが、32ビットのマシンは32ビットの量を少ない量より効率的に処理します。

0 0 0 0  January
0 0 0 1  February
0 0 1 0  March
0 0 1 1  April
0 1 0 0  May
0 1 0 1  June
0 1 1 0  July
0 1 1 1  August
1 0 0 0  September
1 0 0 1  October
1 0 1 0  November
1 0 1 1  December
1 1 0 0  ** unused **
1 1 0 1  ** unused **
1 1 1 0  ** unused **
1 1 1 1  ** unused **

列挙型がない場合、月を表すのに生の整数を使いたくなるかもしれません。それはそれで効率的ですが、コードが読みづらくなってしまいます。enumを使えば、効率的なストレージと読みやすさを手に入れることができます。