2017-07-12 16 views
4

C++のenum構造体(クラス)は、通常の列挙型に比べてサイズが大きくなっていますか?つまり、同じ正確なデータを列挙していると仮定した場合、何バイトの命令コードに変換されますか?C++ enum構造体は、通常の列挙型に比べてサイズが大きくなっていますか?

私は組み込み環境で開発しており、この問題はある程度重要です。 Id'eは、構造体の列挙型が許可する型安全性とスコープを使用するのが好きですが、コードの膨らみを犠牲にすることはありません。それが唯一のタイプのシステムに関連し

+2

なぜ「sizeof」で試してみませんか?私は彼らが同じサイズを持っていると思います。 – max

答えて

9

セマンティクスの相違は、コンパイラによって管理されています。

追加のストレージが必要な場合や、追加の指示が必要な理由はありません。

sizeofを使用して、前者を実際のタイプで簡単にチェックアウトすることができます。

しかし、私は同じ基になる型を共有する二つの列挙型は、「レイアウトの互換性」([C++14: 7.2/9])であることを言うことを除いてC++は、ない保証どのようなタイプのレイアウトを行うことに注意してください。

+0

さらに、 'C++ 'で列挙型のサイズを指定することができます。それで、基礎となる整数型を8ビットの数値にしたいとしましょう:enum class Myenum:uint8_t {} –

+0

@DavideSpataro:そうですが、私が知る限り、sizeof(Myenum)== sizeof(uint8_t) 'です。私はそれを一般的に期待しています。それは私のコンパイラで得られるものです。しかし、前提を作ることに注意してください。 –

+0

@LightnessRacesinOrbit - 基底型の指定は、前方宣言でのABI互換性のためのものですか?そうではありませんか?サイズが同じであるとは本当に仮定できませんか?私たちができなければ、それは欠陥のように思えます。 – StoryTeller

関連する問題