枚举类默认初始化

2024-05-15

枚举类的默认初始化/构造是否已定义行为?

这是一个最小的例子(在线尝试 https://coliru.stacked-crooked.com/a/d3091f82e33f5b42)

enum class ALPHA{
    X = 0,
    Y = 1,
    Z = 2,
};

int main()
{
    ALPHA a = ALPHA(); // use default constructor
    ALPHA b{}; // use default initialization
    std::cout <<static_cast<int>(a) << std::endl; // 0
    std::cout <<static_cast<int>(b) << std::endl; // 0
    return 0;
}

在这两种情况下我都得到零。那么默认初始化是否总是选择第一个枚举类型(例如,此处 X = 0)?我知道它是标准枚举的 UB,但我不确定枚举类的语义?我查了一下CPP参考 https://en.cppreference.com/w/cpp/language/enum也没有找到任何相关信息 - 是否也可以获得标准参考?


[表达式.类型.转换]/1 A 简单类型说明符(10.1.7.2) 或类型名称说明符(17.6) 后跟带括号的可选*表达式列表或大括号初始化列表(初始化器)在给定初始化器的情况下构造指定类型的值。

[表达式.类型.转换]/2...否则,表达式是指定类型的纯右值,其结果对象是使用初始值设定项直接初始化的 (11.6)。


[dcl.init]/(17.4)— 如果初始化器是(),该对象已被值初始化。


[dcl.init]/8 To 值初始化类型的对象T means:

(8.4) — 否则,该对象被零初始化。


[dcl.init]/6对 T 类型的对象或引用进行零初始化意味着:

(6.1)——如果T是标量类型 (6.9),该对象被初始化为通过将整数文字 0(零)转换为T


[基本类型]/9...枚举类型...统称为标量类型.

放在一起,ALPHA()相当于static_cast<ALPHA>(0)

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

枚举类默认初始化 的相关文章

  • C# - 带 GUI 的后台应用程序

    我的问题是我想创建一个后台应用程序 但具有可以恢复并最小化到系统托盘的用户界面 并且它从窗口启动 我尝试搜索如何启动 但只找到有关 Windows 服务的线程 没有 UI 或创建表单并隐藏它 所以我的问题是我应该如何开始 Windows 窗
  • 简单、高效的弱指针,当目标内存被释放时设置为 NULL

    有没有简单 高效的弱 保护指针 我需要多个指向同一对象的指针 当删除该对象时 这些指针都会自动设置为 NULL 有一个 主 指针始终用于删除对象 但可以有多个其他指针引用同一对象 以下是一些不太符合我的需求的解决方案 QPointer ht
  • 在 C 中读取字符时打印

    我正在尝试编写一个简单的小代码片段来响应箭头键按下 我知道 up 由 A 表示 并且我有以下代码来检查该序列 while 1 input char fgetc stdin if input char EOF input char n bre
  • 尝试从 Web 应用程序访问报告服务时,Internet Explorer 导致 IIS 500 错误

    我有一个 aspx Web 表单页面 它调用托管在 SQL 2012 报告服务服务器上的 SQL 2012 SSRS 报表 并使用报表查看器在 aspx 页面上显示报表 问题是当我单击链接将参数发送到报告服务器并运行报告时 页面挂起 仅在
  • 将 python 字典翻译为 C++

    我有包含以下代码的 python 代码 d d 0 0 0 d 1 2 1 d 2 1 2 d 2 3 3 d 3 2 4 for i j in d print d i j d j i 不幸的是 对于我的目的来说 循环遍历 python 中
  • 为什么单击 ToolStrip 按钮两次时会引发 NullReferenceException - openFileDialog.showDialog()?

    我创建了一个干净的 Windows 窗体应用程序解决方案 添加了ToolStrip到主窗体 并在其上放置一个按钮 我还添加了一个OpenFileDialog 所以这样Click event of the ToolStripButton看起来
  • 从 Web 浏览器控件读取 Javascript 变量

    我正在尝试读取从表单上的 WebBrowser 控件加载和调用的 Javascript 变量的值 Example index html 引用名为 test js 的 javascript 在 test js 上 创建并填充了几个变量 然后i
  • JPG、DOC、PDF 等文件是否也编译成程序集?

    Q1 Does aspnet compiler exe将网站目录中包含的所有文件 甚至 JPG DOC 和 PDF 类型 编译成程序集 如果将图像添加到Web项目中的文件列表中 从而将它们添加到项目文件中 这些图像也会被VS编译成程序集吗
  • 在 C# 中将 Exe 文件作为嵌入式资源运行

    我有一个第 3 方 EXE 我只需要从我的 C 应用程序运行它 我的主要目标是对我的 C 文件中的第 3 方可执行文件进行版权保护 有没有更好的方法来做到这一点 我怎样才能做到这一点 首先将嵌入的可执行文件作为资源文件添加到您现有的资源文件
  • C# Response.Write pdf 不适用于 Android 浏览器

    我目前在 Android 环境中使用 pdf 导出时遇到了巨大的问题 我正在使用报告查看器控件将报告呈现为字节数组 接下来我使用response binarywrite方法将字节流输出到浏览器 这适用于所有浏览器以及 iPhone 和 iP
  • 将模型和订阅密钥传递给 LuisDialog,而不是通过属性

    我正在编写一个可以说两种语言的机器人 因此 我需要使用两个单独的 LUIS 应用程序 每种语言一个 Bot Framework 中的 LuisDialog 是这样初始化的 来自 Microsoft 的示例 LuisModel c413b2e
  • 如何使用 PostSharp 拦截基类上的方法调用?

    我想提供一个实现System Object ToString使用 PostSharp 到各种类 我创建了一个继承自的方面MethodInterceptionAspect但是OnInvoke调用时不会调用方法EchoDto ToString发
  • 为什么%c前面需要加空格? [复制]

    这个问题在这里已经有答案了 下面的代码一编译就给出了奇怪的o p main char name 3 float price 3 int pages 3 i printf nEnter names prices and no of pages
  • Caliburn.Micro 事件聚合器

    如果这是一个非常愚蠢的问题 请道歉 但我刚刚开始使用 caliburn micro 我正在努力获取 eventAggregator 似乎没有任何内容订阅 我不确定问题是出在视图模型还是引导程序上 这是视图模型 class MainWindo
  • 在 C++ 中的 Switch-Case 中执行 OR 运算

    你会如何在 C 中做到这一点 例如 如果用户按 ESC 或 q 或 Q 我试图触发程序退出 我尝试寻找它 但在 C 中没有找到它的语法 我知道如何使用 if else 来做到这一点 但是可以使用 switch case 来做到这一点吗 当然
  • 非静态类中的静态方法有什么意义?

    我无法理解以下代码的潜在错误 class myClass public void print string mess Console WriteLine mess class myOtherClass public static void
  • Oracle DataAccess 相关:“动态程序集中不支持调用的成员。”

    据我了解 此类错误已在 SO 上讨论过多次 有些人认为这是 DLL 文件中的错误 有些人通过更改 DLL 版本来解决 其他人似乎没有任何线索 无论如何 我只是发帖试试运气 在 C GUI 上的网格中选择一行时 我的应用程序崩溃了 stack
  • Outlook 插件:从选定的日历中获取元素

    我正在创建 Outlook 加载项 我想知道如何从选定的日历中获取元素 例如 我需要从名为 myCalendar 的日历中获取所有约会项目 现在 我可以从所有日历中获取所有约会项目 谢谢你 这些额外的日历作为主日历文件夹的子文件夹提供 所以
  • C#无循环方式将字符串拆分为多维数组或锯齿状数组

    如何在不循环的情况下将字符串拆分为多维数组或锯齿状数组 我看到一个代码片段 其中有人使用文件流执行此操作 但我不知道如何使其适用于我的字符串 我的字符串类似于1 2 3 1 4 1并可以分为ID Qty 这是我看到的代码 string li
  • 为什么 Windows 只允许一个应用程序访问网络摄像头? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我一直在尝试用 C 制作一个示例网络摄像头应用程序 我发现该应用程序无法同时运行 Skype 或 Oovoo 或任何其他应用程序运行 反之亦然 为什么

随机推荐