转换函数的显式调用和隐式调用有什么区别?

xmh0511

考虑这个例子:

struct A{
    template<class T>
    operator T();  // #1
};
struct B:A{
    template<class U>
    operator U&&();  // #2
};
int main(){
  B  b;
  int a = b;  // #3
  b.operator int();  // #4
}

根据 [class.member.lookup] p7

如果 N 是非依赖的转换函数 ID,则考虑作为 T 成员的转换函数模板。S(t,T)对于每个这样的模板 F,构造查找集,认为函数模板声明t只有在它对应于 F 的声明([basic.scope.scope])时才具有名称。每个这样的查找集的声明集的成员不应是无效集,并包含在结果中。

#1和都包含在查找结果#2,而不管转换函数 ID#3#4. 诊断#3我们所期望的,换句话说,两者#1都是#2候选者,并且它们是无法区分的。

但是,似乎实现#2在处理时将其视为唯一候选者#4如上所述,候选集对于#3或应该是相同的#4我是否省略了其他一些导致差异的规则?或者,它是实现中的错误吗?

戴维斯鲱鱼

实现只是没有赶上新的(明确的)规则,这些规则必须在 2020 年大量发明,因为没有发布的标准版本曾经以任何合理的方式描述了转换函数模板的查找。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在TypeScript中显式键入通用函数参数与隐式键入之间有什么区别?

编程语言中的“显式”和“隐式”之间有什么区别?

Selenium WebDriver中的隐式等待和显式等待之间有什么区别?

在Scala中显式编写“ return”和隐式编写“ return”有什么区别?

显式的foreach游标和隐式的foreach游标有什么区别

C ++隐式和显式继承构造函数调用

隐式转换和显式转换之间的区别

旧的alloctaor :: construct与新的alloctaor和显式构造函数之间有什么区别?

隐式与显式默认构造函数调用

隐式和显式转换为浮点数之间有区别吗?

隐式调用函数

调用函数中的歧义。隐式转换?

隐式类型转换的调用函数

显式与隐式调用toString

函数和调用函数的箭头函数有什么区别

这种隐式广播和通过显式广播做同样事情的另一种方式有什么区别?

隐式声明的副本构造函数与隐式定义的副本构造函数之间有什么区别?

调用函数和传递函数有什么区别?

过程编程和函数式编程有什么区别?

JSP隐式对象和EL表达式隐式对象之间有什么区别?

调用和返回函数有什么区别?

{} 和 () 在调用函数时有什么区别?

CascadeTyp.ALL和显式包括所有CascadeTypes有什么区别?

SQL Server中的隐式转换和显式转换之间的区别

为什么在调用成员函数时std :: reference_wrapper没有隐式转换为引用?

为什么在没有显式调用的情况下调用默认函数?

用于模板的 =delete 和仅使用显式有什么区别?

显式原子加载/存储与常规operator =和运算符T有什么区别?

函数式和命令式编程语言有什么区别?