c++ - const T& rf = lvalue of T 是身份转换吗?
问题描述
T t;
const T& rf = t; // #1
考虑上面显示的初始化#1
。是身份转换吗?换句话说,是否rf
直接绑定到初始化表达式?如果不是,#1 有多少标准转换,这些转换的名称是什么?
解决方案
这是一种身份转换。 [over.ics.ref]/1:
当引用类型的参数直接绑定到参数表达式时,隐式转换序列是恒等转换,除非参数表达式的类型是参数类型的派生类,在这种情况下,隐式转换序列是派生的-到基础转换([over.best.ics])。[...]如果参数直接绑定到将转换函数应用于参数表达式的结果,则隐式转换序列是用户定义的转换序列,第二个标准转换序列是恒等转换,或者如果转换函数返回一个类型的实体,该类型是参数类型的派生类,即派生到基的转换。
(强调我的)
在您的情况下,参数类型与参数类型相同,因此参数类型既不是从参数类型派生的,也不需要用户定义的转换函数。
推荐阅读
- java - 我怎样才能用 jaxb 进行多个包装?
- java - Java 日历 NextEvent 方法
- d3.js - 更新 D3 (v6) 散点图不会添加新圆圈
- java - 带有对象列表的地图的杰克逊反序列化
- azure-devops - 在使用新图像更新 ACR 时创建触发管道的事件
- angular - 尝试使用 APP_INITIALIZER 注入器引导时没有 configService 提供程序
- java - 是否可以通过排除随附的 JIT 来使用 openjdk?
- javascript - JSON.parse 中的 SyntaxError - ReactJS
- python-3.x - 创建一个类装饰器,该装饰器本身就是一个类
- sql - Redshift:使用 json_extract_path_text 查询 JSON 数据