enum color = {blue, black=3, yellow=3};
2种颜色的值为3,有效吗?我认为枚举必须有不同的值。
答案 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 ]