首页 > 解决方案 > const T& rf = lvalue of T 是身份转换吗?

问题描述

T t;
const T& rf = t; // #1

考虑上面显示的初始化#1。是身份转换吗?换句话说,是否rf直接绑定到初始化表达式?如果不是,#1 有多少标准转换,这些转换的名称是什么?

标签: c++language-lawyeroverload-resolution

解决方案


这是一种身份转换。 [over.ics.ref]/1

当引用类型的参数直接绑定到参数表达式时,隐式转换序列是恒等转换,除非参数表达式的类型是参数类型的派生类,在这种情况下,隐式转换序列是派生的-到基础转换([over.best.ics])。[...]如果参数直接绑定到将转换函数应用于参数表达式的结果,则隐式转换序列是用户定义的转换序列,第二个标准转换序列是恒等转换,或者如果转换函数返回一个类型的实体,该类型是参数类型的派生类,即派生到基的转换。

(强调我的)

在您的情况下,参数类型与参数类型相同,因此参数类型既不是从参数类型派生的,也不需要用户定义的转换函数。


推荐阅读