1

そのenumように宣言された場合:

enum {
    A,
    B,
    C,
    D
};

C ++ 11標準の§7.2を参照した一般的なコンパイラサポートは何ですか?具体的には、§7.2.2からのこの抜粋:

最初の列挙子に初期化子がない場合、対応する定数の値はゼロです。初期化子のない列挙子定義は、前の列挙子の値を1つ増やして得られた値を列挙子に与えます。

一般的な最新のコンパイラー(GCC、Intel、Clang、CLの最近のバージョン、その他A = 0)が同じ結果、つまり、、、、を提供B = 1するC = 2ことを期待できますD = 3か?

4

2 に答える 2

6

あなたが引用したルールは、C++11 では新しいものではありません。C++03、C++98、C11、C99、および C89 の一部です。この規則は、これらの言語が標準化される前に存在していました。Java と C# は両方とも、列挙型でこの動作を継承しました。

はい、コンパイラは言語のこの部分をサポートしています。if, switch, s やその他の基本的な言語構造#defineをサポートするのと同じです。int

r値参照やラムダなどについて話しているのではありません。これは、今日の多くのプログラマーが生まれる前からの中核的なものです。

于 2012-08-03T05:00:58.437 に答える
3

はい、コンパイラが標準をサポートしている場合。

enum { a, b, c=0 };
enum { d, e, f=e+2 };

ac、およびdをゼロ、 1、3bと定義しeますf

于 2012-08-03T04:53:05.143 に答える