社区首页 >问答首页 >最佳可行转换函数

最佳可行转换函数
EN

Stack Overflow用户
提问于 2019-06-11 06:30:19
回答 1查看 129关注 0票数 2

在下面的程序中,应该选择哪个(如果有的话)转换函数,以及为什么?

代码语言:javascript
代码运行次数:0
复制
int r;
struct B {};
struct D : B {};
struct S {
  D d;
  operator D&(){r=1; return d;} // #1
  operator B&(){r=2; return d;} // #2
};
int main() {
  S s;
  B& b = s;
  return r;
}

gcc和clang都选择了转换函数#2,但是为什么呢?

标准他说

(1)在dcl.init.ref中指定的条件下,引用可以直接绑定到将转换函数应用于初始化表达式的结果。重载解析用于选择要调用的转换函数。假设“对cv1 T的引用”是被初始化的引用的类型,而“cv1”是初始化表达式的类型,对于S是一个类类型,则选择候选函数如下: (1.1) -考虑S及其基类的转换函数。那些不隐藏在S中的非显式转换函数和屈服类型“cv2 T2的lvalue引用”(当初始化lvalue引用或对函数的rvalue引用时)或“cv2 T2”或“对cv2 T2的rvalue引用”(当初始化rvalue引用或对函数的lvalue引用时),其中“cv1 T”是与“cv2 T2”兼容的引用。对于直接初始化,那些未隐藏在S中的显式转换函数和屈服类型“lvalue引用到cv2 T2”(初始化lvalue引用或对函数的rvalue引用时)或“cv2 T2的rvalue引用”(当初始化rvalue引用或对函数的lvalue引用时),其中T2是与T相同的类型,或者可以通过限定转换转换为T类型,也是候选函数。 (2)参数列表有一个参数,即初始值表达式。 注意:这个参数将与转换函数的隐式对象参数进行比较。- end注意事项 

这里我们有两个候选函数#1和#2,它们都是可行的--如果其中一个被删除,程序仍然会编译。这两个转换函数只使用隐式参数,并对其具有相同的cv-和ref-限定。因此,没有一个应该是最可行的,程序也不应该编译。它为什么要编译?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-11 07:03:17

如您所知,过载分解分三个阶段进行:(1)枚举候选函数;(2)确定哪些候选函数是可行的;(3)选择最佳可行函数。

根据Over.Match.最好的/1:

..。一个可行的函数F1被定义为比另一个可行函数F2更好的函数,如果对于所有参数i,ICSi(F1)不是比ICSi(F1)更差的转换序列,那么

  • 对于某些参数j,ICSj(F1)是比ICSj(F2)更好的转换序列,或者,如果不是这样,
  • 上下文是用户定义的转换(参见11.6、16.3.1.5和16.3.1.6)的初始化,从F1的返回类型到目标类型的标准转换序列(即正在初始化的实体的类型)比从F2返回类型到目标类型示例的标准转换序列要好.或者,如果不是那样,
  • ..。进一步的平局规则..。

s到#1或#2的隐式对象参数所需的隐式转换是身份转换,因此ICS1(#1)和ICS2(#1)是不可区分的,第二个要点在这里是相关的。在#1的情况下,需要从转换函数的返回类型(即D& )转换为所需的类型,即B&。对于#2,标准转换序列是身份转换(B&B&),这更好。因此,在这种情况下,选择函数#2比#1更好。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56546047

复制
相关文章
model_to_dict datetime 不转换
Django model_to_dict skips all DateTimeField when converting models
刀枪不入de王二花
2022/08/15
8860
model_to_dict datetime 不转换
pandas datetime与时间戳互相转换,字符串转换datetime
to_datetime 如果传入的是10位时间戳,unit设置为秒,可以转换为datetime
lovelife110
2021/12/08
4.7K0
转换 datetime 和 smalldatetime 数据[通俗易懂]
转换为 datetime 时,Microsoft® SQL Server™ 2000 将拒绝所有无法识别为日期的值(包括 1753 年 1 月 1 日以前的日期)。当日期在适当的范围内(1900 年 1 月 1 日到 2079 年 6 月 6 日)时,可将 datetime 值转换为 smalldatetime。时间值被四舍五入为最接近的分钟数。
全栈程序员站长
2022/08/31
5140
[C#] DateTime与double相互转换
OLE 自动化日期作为浮点数实现,其整型分量是 1899 年 12 月 30 日午夜前后的天数,其小数部分表示当天除以 24 的时间。例如,1899 年 12 月 31 日午夜表示 1.0;上午 6,1900 年 1 月 1 日以 2.25 表示:午夜,1899 年 12 月 29 日以 -1.0 表示:和 6 A.M., 1899 年 12 月 29 日由 -1.25 表示。
科控物联
2022/06/13
2.4K0
[C#]   DateTime与double相互转换
UTC时间格式转换为DateTime,Python
调用接口的时候传递了一个时间参数,大概就是长这样的:2020-07-22T02:26:37.329Z
SingYi
2022/07/14
2.5K0
UTC时间格式转换为DateTime,Python
date转换为localdatetime_java datetime
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
6000
DATETIME类型和BIGINT 类型互相转换
项目中使用BIGINT来存放时间,以下代码用来转换时间类型和BIGINT类型 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: GGA -- Create date: 2013-03-28 -- Description: 将时间类型转化成BIGINT,返回指定时间 -- 到-01-01 08:00:00.000的毫秒数 -- ======
用户1217611
2018/01/30
1.3K0
如何将 Python datetime.datetime 转换为 Excel 序列号?
Excel 使用一种特殊格式来存储日期和时间,称为序列号。序列号是自 1 年 1899 月 <> 日(Excel 认为是时间开始的日期)以来的天数。
很酷的站长
2023/08/11
3440
如何将 Python datetime.datetime 转换为 Excel 序列号?
DATETIME类型和BIGINT 类型互相转换
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/119727.html原文链接:https://javaforall.cn
全栈程序员站长
2021/11/29
7160
Net任意String格式转换为DateTime类型
方式一:Convert.ToDateTime(string) Convert.ToDateTime(string) 注意:string格式有要求,必须是yyyy-MM-dd hh:mm:ss 方式二:Convert.ToDateTime(string, IFormatProvider) DateTimeFormatInfo dtFormat = new System.GlobalizationDateTimeFormatInfo(); dtFormat.ShortDatePattern = "yyyy/MM
磊哥
2018/05/08
1.1K0
Windows凭据不工作
如果不是敲错IP、用户名、密码,报凭据不工作,一般情况下执行这几句命令后重启远程服务就正常了
Windows技术交流
2021/06/15
6.1K0
[1154]如何将字符串转换为datetime
1.把datetime转成字符串: 2017-11-23 17:05:18 2.把字符串转成datetime: 2017-11-23 16:10:10 3.把字符串转成时间戳形式: 1511424610.0 4.把时间戳转成字符串形式: 2017-11-23 17:05:18 5.把datetime类型转外时间戳形式: 1511427918.0
周小董
2022/07/27
3.3K0
Java多线程不共享数据
import org.omg.CORBA.PUBLIC_MEMBER; /** * Created by wuyupku on 2019-04-12 12:24 * * @Beijing CHINA */ public class Demo01 { public static void main(String[] args) { mythread thread1 = new mythread("a"); mythread thread2 = new myth
葆宁
2019/04/18
1.2K0
Java多线程不共享数据
RDP你的凭据不工作/RDP密码不刷新
如果你不属于上述的情况,请查看:https://learn.microsoft.com/zh-cn/windows-server/remote/remote-desktop-services/troubleshoot/rdp-error-general-troubleshooting#check-whether-a-group-policy-object-gpo-is-blocking-rdp-on-a-local-computer
阿龙w
2022/12/02
12.7K0
RDP你的凭据不工作/RDP密码不刷新
datetime
datetime是Python处理日期和时间的标准库。 获取当前日期和时间 我们先看如何获取当前日期和时间: >>> from datetime import datetime >>> now = datetime.now() # 获取当前datetime >>> print(now) 2015-05-18 16:28:07.198690 >>> print(type(now)) <class 'datetime.datetime'> 注意到datetime是模块,datetime模块还包含一个dateti
用户1214487
2018/01/24
2.5K0
128 天不上班不工作:照样领工资 9.5 万
原告:北京和风畅想科技有限公司 被告:杜某,男,1988年出生 和风畅想公司向法院提出诉讼请求: 1、判决无须撤销《解除劳动关系通知书》,双方无需继续履行劳动合同; 2、判决和风畅想公司无须向杜某支付自2020年2月29日至2020年7月5日期间工资收入损失95172.41元。 事实和理由: 2020年11月2日,和风畅想公司收到北京市朝阳区劳动人事争议仲裁委员会作出的京朝劳人仲字[2020]第16281号裁决书(以下简称“第16281号裁决书”),和风畅想公司不服该裁决。 不服裁决理由: 一、第1628
云头条
2022/10/09
2.2K0
128 天不上班不工作:照样领工资  9.5 万
Java多线程详解4【面试+工作】​
Java多线程详解【面试+工作】 Java线程:并发协作-死锁 线程发生死锁可能性很小,即使看似可能发生死锁的代码,在运行时发生死锁的可能性也是小之又小。 发生死锁的原因一般是两个对象的锁相互等待造成的。 在《Java线程:线程的同步与锁》一文中,简述死锁的概念与简单例子,但是所给的例子是不完整的,这里给出一个完整的例子。 /** * Java线程:并发协作-死锁 * * @author Administrator 2009-11-4 22:06:13 */ publicclass Test {
Java帮帮
2018/03/15
9180
datetime模块
datetime模块(掌握) datetime模块一般用于时间的加减。 # datetime模块可以看成是时间加减的模块 import datetime # 返回当前时间 print(datetime.datetime.now()) 2019-03-07 16:22:14.544130 print(datetime.date.fromtimestamp(time.time())) 2019-03-07 # 当前时间+3天 print(datetime.datetime.now() + datetime.ti
py3study
2020/01/16
7200
Java多线程详解6【面试+工作】
Java多线程详解【面试+工作】 Java线程:新特征-原子量 所谓的原子量即操作变量的操作是“原子的”,该操作不可再分,因此是线程安全的。 为何要使用原子变量呢,原因是多个线程对单个变量操作也会引起一些问题。在Java5之前,可以通过volatile、synchronized关键字来解决并发访问的安全问题,但这样太麻烦。 Java5之后,专门提供了用来进行单变量多线程并发安全访问的工具包java.util.concurrent.atomic,其中的类也很简单。 下面给出一个反面例子(切勿模仿): impo
Java帮帮
2018/03/15
5970
Java多线程详解6【面试+工作】
点击加载更多

相似问题

DateTime转换不工作的c#

20

字符串到DateTime转换不工作

33

多线程不工作

12

MVC DateTime不转换

11

DateTime,.AddSeconds()不工作?

38
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文