当某些成员具有用户定义的值时,枚举成员的值

发布于 2024-08-31 17:08:26 字数 163 浏览 2 评论 0原文

enum ABC{
 A,
 B,
 C=5,
 D,
 E
};

D 和 E 是否保证大于 5?
A 和 B 是否保证小于 5(如果可能)?

编辑:如果我说C=1会发生什么

enum ABC{
 A,
 B,
 C=5,
 D,
 E
};

Are D and E guaranteed to be greater than 5 ?
Are A and B guaranteed to be smaller than 5 (if possible)?

edit: What would happen if i say C=1

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

臻嫒无言 2024-09-07 17:08:26

它由 C++ 标准 7.2/1 保证:

枚举器列表中的标识符被声明为常量,并且可以出现在常量所在的任何位置
必需的。带有 = 的枚举器定义为关联的枚举器提供了由
常量表达式。常量表达式应为整型或枚举类型。如果第一个
枚举器没有初始化器,相应常量的值为零。枚举器定义
没有初始化器为枚举器提供通过增加前一个值而获得的值
枚举器加一。

It is guaranteed by C++ Standard 7.2/1:

The identifiers in an enumerator-list are declared as constants, and can appear wherever constants are
required. An enumerator-definition with = gives the associated enumerator the value indicated by the
constant-expression. The constant-expression shall be of integral or enumeration type. 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.

眼眸印温柔 2024-09-07 17:08:26

在你的情况下,是的(参见基里尔的回答)。但是,请注意以下情况

enum ABC
{ 
  A,
  B,
  C = 5,
  D,
  E,
  F = 4,
  G,
  H
};

编译器不会避免与以前使用的值发生冲突,也不会尝试使每个值都大于所有先前的值。
在这种情况下,G 将大于 F,但不大于 C、D 或 E。

In your situation, yes (see Kirill's answer). However, beware the following situation:

enum ABC
{ 
  A,
  B,
  C = 5,
  D,
  E,
  F = 4,
  G,
  H
};

The compiler will not avoid collisions with previously used values, nor will it try to make each value greater than all previous values.
In this case, G will be greater than F, but not C, D, or E.

淡忘如思 2024-09-07 17:08:26

是的,这是有保证的,A 和 B 的值必须分别为 0 和 1。

Yeah it is guaranteed and the value of A and B has to be 0 and 1 respectively.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文