3
enum color = {blue, black=3, yellow=3};

2 色の値は 3 ですが、有効ですか? 列挙には異なる値が必要だと思いました。

4

5 に答える 5

2

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 *}
于 2012-04-09T14:34:03.567 に答える
0

はい、有効です。言語仕様に違反していないためです。以下は、ドラフト 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 ]
于 2012-04-09T14:34:18.603 に答える
0
#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;
}

それらを同じにするのは得策ではありません。

于 2012-04-09T14:28:49.810 に答える
0

フレームワークを開発したとします。このフレームワークは、パラメーター化に enum を使用します

何らかの理由で、以前に使用された用語に満足できなくなりました。

用語を置き換えるだけでは、既存のソフトウェアが壊れてしまいます。古い用語と新しい用語を提供することにしました (少なくとも 1 回のリリース サイクルについて)。

于 2012-04-09T14:26:55.163 に答える