将整型转换为枚举:函数式转换与初始化

2024-01-16

假设有一个这样的枚举:

enum foo: int {
    first,
    second
}

然后我按如下方式使用它:

foo f(1); // error: cannot initialize a variable of type 'foo' with an rvalue of type 'int'
foo f = foo(1); // OK !

我想知道两者有什么区别? 我知道第二个版本可以被视为功能风格的转换,但是为什么这有什么不同呢?

例如,如果我这样做:

class Bar {};
Bar b = Bar(1); // no matching conversion for functional-style cast from 'int' to 'Bar'

我显然得到了一个有道理的错误。因此,这让我相信,为了使上面的 foo 示例的第二个版本能够工作,必须从int to enum在某处定义,但如果存在这样的转换,那么为什么我在第一个版本中会收到错误?

如果这是重复的,我深表歉意。我怀疑是这样。 这似乎相关:这是演员还是建筑? https://stackoverflow.com/questions/7612006/is-this-a-cast-or-a-construction...但不放弃。

提前致谢 !


是的,这两种形式有很大的不同,而且有微妙的不同。让我们看看第一个,它会导致错误。这是初始化f,类型foo,从一个int。这里描述了,重点是我的:

[dcl.init]/17.8 http://eel.is/c++draft/dcl.init#17.8

否则,被初始化的对象的初始值为 初始化表达式的(可能已转换)值。标准 如有必要,将使用转换, 转换初始化器 目标类型的 cv 未限定版本的表达式;不 考虑用户定义的转换。如果无法转换 完成后,初始化格式错误.

在这种情况下相关的转换是整数转换,主要是由以下指定的转换:

[转化积分]/1 http://eel.is/c++draft/conv.integral#1

无作用域枚举类型的纯右值可以转换为 整数类型的纯右值。

因此,无范围枚举可以隐式转换为整数,但反之则不然。这就是初始化格式错误的原因。然而,函数式强制转换表示法本质上是静态强制转换。还有一个静态转换可以执行(几乎)任何有效标准转换的逆操作 http://eel.is/c++draft/expr.static.cast#7.sentence-1。所以选角的1然后用于初始化f,但此时我们正在从 a 进行复制初始化fooprvalue,这当然完全没问题。

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

将整型转换为枚举:函数式转换与初始化 的相关文章

  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • Java 的 MessageFormat 未本地化小写日期中的葡萄牙月份

    月份名称以大写字母而不是小写字母开头 正如他们应该的那样 https meta wikimedia org wiki Capitalization of Wiktionary pages Capitalization of month na
  • 关系的时间复杂度 T(n) = T(n-1) + T(n/2) + n

    对于关系 T n T n 1 T n 2 n 我可以先解出项 T n 1 n 它给出 O n 2 然后解出项 T n 2 O n 2 吗 根据主定理 它也给出了 O n 2 或者它是错误的 不 你不能用主定理来解决它 你需要使用来解决它阿克
  • 创建一个对象,其类型在字符串参数中

    我有一个 TreeView 其中包含节点 当用户单击某个节点时 应创建并显示相应的 CrystalReport 文档 例如 我的节点名称是 PeriodReport1 PeriodReport2 PeriodReport3 我的 Cryst
  • 无法找到并单击条件条款按钮

    我是 pupeeteer 的新手 首先我要做的是加载页面并单击按钮 但是 它无法找到该元素 我认为这是因为我需要找到父元素或父元素的父元素
  • Asp.net Mvc 4 和 Web Api 中的路由

    我可以同时使用以下两个路由规则吗 config Routes MapHttpRoute name ActionApi routeTemplate api controller action id defaults new id RouteP
  • IE11 中奇怪的 @font-face 问题(仅在您检查开发人员工具中的元素后才呈现)

    我有一些网络字体可以在除 IE11 之外的所有浏览器中正常工作 奇怪的是 如果你进入这个页面 然后使用 IE11 开发人员工具检查 功能 要点 突然所有字体都可以工作了 有任何想法吗 font face font family Helvet
  • POSIX“tee”命令如何工作?

    tee newOutputFile lt existingInputFile gt newOutputFile2 究竟会怎样tee接受论点 会是这样吗 Tee将首先处理newOutputFile lt existingInputFile所以
  • CSS3连续旋转动画(就像加载日晷)

    我正在尝试使用 PNG 和 CSS3 动画来复制 Apple 风格的活动指示器 日晷加载图标 我让图像旋转并连续进行 但动画完成后在进行下一次旋转之前似乎有延迟 webkit keyframes rotate from webkit tra
  • JfreeChart 中的自动缩放 Y 轴

    我在用JFreeChart在我的 Java 应用程序中创建蜡烛图 然而 我的图表最终看起来像这样 http imageshack us photo my images 69 capturebhx png http imageshack us
  • 出现分段错误

    我看到很多关于出现分段错误在SO中的C程序中 我认为参考这里的内容会很棒 这是一个涉及某些导致分段错误的情况的问题 我的答案发布在下面 正如一些答案中所写 所有情况下的行为都是未定义的 尽管很多人都将他们视为分段故障 所以这个问题是关于是什
  • 如何有条件地使用“平面图”运算符? (角度2/rxjs)

    我想要实现的是有条件地运行一系列可观察的结果 return observable map response gt response flatmap response1 gt observable1 response1 flatmap res
  • 找不到符号 if 语句错误

    我一直在编写一个小程序来娱乐 但我收到了这个错误 Compilation error time 0 11 memory 380672 signal 0Main java 22 error cannot find symbol string
  • 从列表中选择 5 个不同的元素?

    从 python 列表中选择 5 个不同元素并将它们添加到新列表中的最佳方法是什么 谢谢您的帮助 假设您希望随机选择它们并且new list已经定义了 import random new list random sample old lis
  • 如何实现隐式方法的中间类型?

    假设我想提供方法foo在现有类型上A在我的控制之外 据我所知 在 Scala 中执行此操作的规范方法是实现从A到某种实现的类型foo 现在我基本上看到两个选择 为此目的定义一个单独的 甚至可能是隐藏的类 protected class Fo
  • 当用户拒绝地理定位服务时,我会收到拒绝事件吗?

    我的意思是 如果我在网页上有一个按钮 当用户单击该按钮时 然后就可以获取用户的地理位置信息 但在此之前 浏览器会询问用户是否接受使用地理定位服务 如果用户拒绝地理定位服务 我可以获得拒绝事件吗 Yes Example navigator g
  • 如何通过nodejs实现APNS通知?

    现在有人有一个很好的 npm 模块来实现 Apple PUSH 通知吗 一个简单的例子就很好了 我找到的解决方案如下 它使用apn module var apn require apn var ca entrust 2048 ca cer
  • 将一个函数中的可变参数传递给 D 中的另一个函数

    我有一个可变的 D 风格函数foo format 这是一个包装器writefln 我想做这样的事情 foo format lt gt writefln format 本质上 将省略号参数传递给 writefln 我知道这在 C C 中并不容
  • 在 Android KitKat 中接收彩信

    所以这个视频Android 4 4 短信 API http www youtube com watch v mdq0R2WQssQ DevBytes 解释了 KitKat 中 SMS API 的最新变化 他们还提供了示例项目的链接 http
  • NSURLConnection sendAsynchronousRequest:queue:completionHandler:连续发出多个请求?

    我一直在使用NSURLConnection s sendAsynchronousRequest queue completionHandler 方法很棒 但是 我现在需要连续发出多个请求 我怎样才能在仍然使用这个伟大的异步方法的同时做到这一
  • 将整型转换为枚举:函数式转换与初始化

    假设有一个这样的枚举 enum foo int first second 然后我按如下方式使用它 foo f 1 error cannot initialize a variable of type foo with an rvalue o