enum color = {blue, black=3, yellow=3};
2 色の値は 3 ですが、有効ですか? 列挙には異なる値が必要だと思いました。
C++ 標準、セクション 7.2、パート 1 では、定数式が整数型または列挙型であることのみが要求されます。定数値が異なる必要はありません。これにより、コードの表現力が向上すると思われる場合は、定数のエイリアシングの柔軟性が高まります。例えば、
enum color {red=1,green=2,blue=3,max_color=3};
if (myColor > max_color) {/* report an error *}
よりも良い
enum color {red=1,green=2,blue=3};
if (myColor > blue) {/* report an error *}
はい、有効です。言語仕様に違反していないためです。以下は、ドラフト N3242 からの引用です。例でわかるように、異なる列挙子に関連付けられた値は異なる必要はありません。
The identifiers in an enumerator-list are declared as constants,
and can appear wherever constants are required. An enumeratordefinition
with = gives the associated enumerator the value indicated by the
constant-expression. The constant-expression shall be an integral
constant expression (5.19). If the first enumerator has no initializer,
the value of the corresponding constant is zero. An enumerator-definition without
an initializer gives the enumerator the value obtained by
increasing the value of the previous enumerator by one.
[ Example:
enum { a, b, c=0 };
enum { d, e, f=e+2 };
defines a, c, and d to be zero, b and e to be 1, and f to be 3. —end example ]
#include <iostream>
using namespace std;
enum color {blue, black=3, yellow=3};
int main()
{
color a = blue;
color b = black;
color c = yellow;
cout<<a<<endl;
cout<<b<<endl;
cout<<c<<endl;
return 0;
}
それらを同じにするのは得策ではありません。
フレームワークを開発したとします。このフレームワークは、パラメーター化に enum を使用します
何らかの理由で、以前に使用された用語に満足できなくなりました。
用語を置き換えるだけでは、既存のソフトウェアが壊れてしまいます。古い用語と新しい用語を提供することにしました (少なくとも 1 回のリリース サイクルについて)。