首页 > 后端开发 > C++ > 正文

转换序列歧义:转换运算符何时胜过构造函数?

DDD
发布: 2024-11-12 06:17:02
原创
934 人浏览过

Conversion Sequence Ambiguity: When Does a Conversion Operator Trump a Constructor?

转换序列歧义:转换构造函数与运算符的优先级

从 A 类对象初始化 B 类对象时,存在歧义如果同时定义了转换构造函数和转换运算符,则可能会出现这种情况。这些函数之间的交互决定了将调用哪一个。

优先级建立

根据 C 标准(8.5/14),用户定义的转换序列可以从 A 转换为 B 被枚举,并通过重载决议选择最好的一个。仅当转换构造函数不适用时才考虑转换运算符。

参数转换

重载解析将转换函数和构造函数转换为与调用参数匹配的参数列表。对于转换运算符,会生成隐式对象参数,从而在运算符的函数参数和源对象之间创建绑定。

获胜候选人

转换运算符由于“最少 const 资格”规则而获胜 (13.3.3.2/3)。在这种情况下,构造函数 B(const A&) 有一个 const 引用作为其参数,而转换运算符运算符 B() 有一个非常量引用。由于源对象是右值(临时),非常量引用可以绑定到它。

面向对象的视角

从面向对象的角度来看, A 的转换运算符相对于 B 的构造函数的默认选择表明源类 (A) 有责任定义转换过程。然而,作为目标类的 B 是否应该对这种转换承担主要责任仍然存在争议。

以上是转换序列歧义:转换运算符何时胜过构造函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板