此枚举是否有效,如果是,为什么?

时间:2012-04-09 14:19:17

标签: c++

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

2种颜色的值为3,有效吗?我认为枚举必须有不同的值。

5 个答案:

答案 0 :(得分:9)

它是有效的,因为它是允许的。可能不是一个好的设计。

至于为什么,我不确定你在那里寻找什么答案。如果不允许,那么它将防止有两个枚举引用相同值的情况。 (我确信我可以很容易地提出一些有意义的例子。)

因此,如果在限制我可以做的事情之间做出选择,或者因为我通常不会想要复制品而受到限制,那么我会以这种方式投票。

答案 1 :(得分:2)

C++ standard,第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 *}

答案 2 :(得分:0)

考虑您已经开发了一个框架。该框架使用枚举进行参数化

出于某种原因,您对之前使用的术语不满意。

只需更换该术语就会破坏现有软件。您决定提供新旧术语(至少在一个发布周期中)

答案 3 :(得分: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;
}

让它们变得相同不是一个好主意。

答案 4 :(得分: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 ]