C++ 枚举从 0 开始吗​​?

2023-12-21

如果我有一个enum不给枚举分配数字,它的序数值会是 0 吗?例如:

enum enumeration { ZERO,
                   ONE,
                   TWO,
                   THREE,
                   FOUR,
                   FIVE,
                   SIX,
                   SEVEN,
                   EIGHT,
                   NINE };

我已经找到了帖子引用 C99 标准需要 0 序数 https://stackoverflow.com/a/30312219/2642059。但我知道 C++ 忽略了 C99 标准中的几件事。我还找到了一个使用序数值 1 见证编译器的发布 https://stackoverflow.com/a/404253/2642059,我似乎也记得看到过,尽管我不能说那是多久以前的事了。

我真的很想看到一个答案来证实 C++ 的这一点,但我也想知道序数 0 是否成立even if我在中间指定一个值enum:

enum enumeration { ZERO,
                   ONE,
                   TWO,
                   THREE = 13,
                   FOUR,
                   FIVE,
                   SIX,
                   SEVEN,
                   EIGHT,
                   NINE };

根据该标准 [dcl.enum]

使用仅 enum 的 enum-key 声明的枚举类型是无作用域枚举,其枚举器也是无作用域枚举器。 enum-keys 枚举类和枚举结构在语义上是等效的;使用其中之一声明的枚举类型是有作用域的枚举,并且其枚举器是有作用域的 枚举器。在作用域枚举的声明中不得省略可选标识符。枚举基的类型说明符序列应命名整型;任何简历资格都会被忽略。声明无作用域枚举的 opaqueenum 声明不得省略 enum-base。枚举器列表中的标识符被声明为常量,并且可以出现在需要常量的地方。带有 = 的枚举器定义为关联的枚举器提供常量表达式指示的值。如果第一个 枚举器没有初始化器,相应常量的值为零。不带初始化器的枚举器定义为枚举器提供通过将前一个枚举器的值加一而获得的值。

Emphasis mine

所以是的,如果您不指定起始值,它将默认为 0。

我真的很想看到一个在 C++ 中证实这一点的答案,但我也想知道即使我在枚举中间指定一个值,序数 0 是否成立:

这也有效。它将从 0 开始并一路递增。然后,在枚举之后,您为其分配的值将开始为后续枚举器的该值加一。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 枚举从 0 开始吗​​? 的相关文章

随机推荐

  • WPF 过滤列表框

    我有一个ListBox绑定到字符串列表 我想在输入文本时过滤列表TextBox 我该怎么做 public void ListLoad ElementList new List
  • 如何将字符串从 Haskell 传递到 C?

    我想做的就是将纯文本字符串从 Haskell 传递到 C 但是 它表示 Char 是不可接受的返回类型 我无法在任何地方找到他们认为的原因 也找不到可接受的返回类型 我正在尝试制作一个非常简单的操作系统映像 我可以使用 Qemu 启动它 有
  • 确保容量在 Java 中如何工作?

    StringBuffer buff1 new StringBuffer tuts point System out println Old Capacity of buff1 buff1 capacity buff1 ensureCapac
  • Linux 上的 Swift:迈出第一步

    我对斯威夫特完全陌生 它刚刚作为 Linux 的开源版本发布 我想尝试一下 这是在 ubuntu 14 04 上 clang 已根据先决条件安装
  • 添加过多 ID 对 html / js 渲染性能的影响

    我目前正在进行的一个项目大约有 10 个 UL 每个 UL 包含 10 50 个元素 建议每个元素都有一个指定的唯一 ID 我们将使用它通过 Javascript 更新内容 这看起来需要向页面添加大量 ID 但每个字段都会有一个真实且有意义
  • Flutter 上的简单可扩展列也不会具有“标题”>“可扩展”

    我正在尝试制作一个可扩展的列 也就是说 它有 2 个子项 子项和展开小部件时出现的子项 在下图中 您可以看到子项 蓝色 和展开的子项 红色 它们仅应在Expand gt 单击按钮 一切正常 但无论我做什么 我都无法得到Expand gt 按
  • Oracle 如果行不存在则插入

    insert ignore into table1 select value1 value2 from table2 where table2 type ok 当我运行这个时 我收到错误 缺少 INTO 关键字 当我运行这个时 我收到错误
  • HBase 表上的 SparkSQL

    任何人都直接在 HBase 表上使用 SparkSQL 就像在 Hive 表上使用 SparkSQL 一样 我是spark新手 请指导我如何连接hbase和spark 如何查询hbase表 AFAIK 有 2 种方法连接到 hbase 表
  • iOS - 使用 AVPlayer 检测 URL 流是否正常工作

    这就是我的代码中从 url 播放的样子 private func play let streamUrl let playerItem AVPlayerItem url streamURL radioPlayer AVPlayer playe
  • ls | 的输出厕所-l

    通常输出为wc l命令给出文件中的行数 但是 当我们通过管道输出ls命令它 它似乎正确显示当前工作目录中的文件和目录以及链接的数量 我的问题是输出ls命令在同一行中显示某些文件和目录的名称 那么 为什么在这种情况下使用ls wc l与相比
  • 如何使用 Powershell 更改文件的属性?

    我有一个 Powershell 脚本 可以将文件从一个位置复制到另一个位置 复制完成后 我想清除源位置中已复制的文件的存档属性 如何使用 Powershell 清除文件的 Archive 属性 您可以使用旧的 dos attrib 命令 如
  • 以编程方式更改 ABAddressBook、ABPersonCopyArrayOfAllLinkedPeople 中的链接联系人数组

    是否可以通过编程方式添加 删除 CFArray 返回的联系人ABPersonCopyArrayOfAllLinkedPeople 因此 有效地链接和取消链接来自不同来源的不同联系人记录 以在 iOs 电话簿中显示为 统一 据我所知 至少在
  • 如何在java中打开第2层原始套接字?

    如何在java中打开第2层原始套接字 在 C 中 我们通常使用 AF PACKET 级别来打开具有 sockaddr ll 结构的第 2 层原始套接字 二层编程对应的socket包是什么 使用普通的 Java 方法这是不可能的 因为 Jav
  • 使用 nuxtJS + Vue2-Editor 时如何解决文档未定义错误?

    我正在尝试使用 vue2 editor 设置 nuxtjs 应用程序 如果我尝试通过客户端导航导航到编辑器页面 则其加载但如果我直接访问或刷新 例如 com editor 页面 我收到文档未定义错误 我已经识别出它是因为 vue2 编辑器不
  • 如何交换 observableArray 中的两个项目?

    我有一个按钮 可以将 observableArray 中的项目向左移动一个位置 我正在按照以下方式进行操作 然而 缺点是categories index 被从数组中删除 从而丢弃了该节点上的任何DOM操作 在我的例子中是通过jQuery验证
  • NUnit 异步测试导致 AppDomainUnloadedException

    我有一个带有异步操作的 NET 4 5 WCF 服务 我进行了集成测试 它使用 NetNamedPipeBinding 构建服务主机并通过客户端进行操作 然而 每次这样的测试总是会导致 NUnit 报告以下内容 System AppDoma
  • 在 DBAccess 中关联两个对象

    我正在为我的 iOS 项目使用 dbaccess 如何将数组传递给 dbaccess 对象 例如 我有像这样的 dbobject interface Member DBObject property strong NSString firs
  • 如何发送带有参数的 getForObject 请求 Spring MVC

    我在服务器端有一个方法 它为我提供有关在我的数据库中注册的特定名称的信息 我正在从我的 Android 应用程序访问它 向服务器的请求正常完成 我想做的是根据我想要获取的名称将参数传递给服务器 这是我的服务器端方法 RequestMappi
  • 我应该严格避免在 Android 上使用枚举吗?

    我曾经定义一组相关的常量 例如Bundle在如下界面中组合键 public interface From String LOGIN SCREEN LoginSCreen String NOTIFICATION Notification St
  • C++ 枚举从 0 开始吗​​?

    如果我有一个enum不给枚举分配数字 它的序数值会是 0 吗 例如 enum enumeration ZERO ONE TWO THREE FOUR FIVE SIX SEVEN EIGHT NINE 我已经找到了帖子引用 C99 标准需要