3

重複の可能性:
enum を使用して C++ コードで単一の定数を定義する理由はありますか?

古いコードで次のスニペットに出くわしましたが、列挙型の奇妙な使い方があります:-

class MyClass
{
public:
  enum {MAX_ITEMS=16};
  int things[MAX_ITEMS];
...
} ;

これは よりも優れて#define MAX_ITEMS 16いますが、何か違いはありstatic const int MAX_ITEMS=16;ますか?

メモリの霧を掘り返してみると、一部の C++ コンパイラでは、クラス内で const を初期化できず、代わりに別の...

const int MyClass::MAX_ITEMS = 16;

... .cpp ソース ファイル内。これはそのための古い回避策ですか?

4

1 に答える 1

3

これは、クラス定義内の配列を初期化するために使用される古い列挙ハック」です。

従来、C++03 より前ではstatic const、クラス宣言内で a を初期化することはできませんでした。配列宣言には、宣言にコンパイル時の定数インデックスが必要なので。enum ハックが回避策として使用されました。

class A 
{
    enum { arrsize = 2 };
    static const int c[arrsize] = { 1, 2 };

};
于 2013-01-09T15:34:01.523 に答える