2016-07-12 2 views
1

厳密に型指定された "列挙型クラス"を "列挙型"に使用することの利点を理解していますが、クラスメイトと私はどちらか一方がより多くのメモリを使用するかどうか疑問に思っています。C++では、 "enum class"と "enum"の間でメモリ使用量に違いがありますか?

+2

(大きな基底型を指定しない限り)enumクラスがより多くのメモリを使用する理由はありません。簡単なプログラムと実験を作ってみませんか? –

+1

私は、コンパイル時にはほとんどの違いが処理され、実行時ではなく(メモリの変更なし)処理されると思います。これは、テストするのはかなり簡単なはずです - ちょうど2つの(ほぼ)同一のプログラムを作成し、コンパイルし、比較してください。 – Conduit

答えて

3

enum classは、まだ付加的なオーバーヘッドのない整数値です。しかし、enum classの基底型はデフォルトでintになりますが、通常はenum型が指定されておらず、実装は最小限の整数型を自由に選択できます。理論的には、基底型を指定しない場合は、enum classは平文より大きい場合がありますenum

C++仕様7.2.5 - 列挙減速

enum class

基底型を明示的に列挙ベースを使用して指定することができます。明示的に指定されていない場合、スコープ付き列挙型の基になる型はintです。

enum

ないイニシャライザを最初に列挙子に指定されていない場合、初期値は不定積分 タイプを有しています。

+0

優秀で、文書化されており、理解しやすい回答をいただきありがとうございます! – jamesc1101

+1

また、メモリの制約が懸念される場合は、使用するデータ型を指定できることを学ぶのにも優れた教訓です。例:enum class Color:char {Red、White、Blue}; – jamesc1101

関連する問題