`const T& rf = t`是否为恒等转换?初始化的标准转换解析
分析
const T& rf = t;的初始化行为 嘿,我们来一步步拆解这个问题:
首先看代码里的初始化:T t; const T& rf = t;
1. 这个初始化属于恒等转换吗?rf是否直接绑定到t?
先给结论:rf确实是直接绑定到t的,但严格来说这个初始化不属于恒等转换。
为什么这么说?恒等转换的定义是把一个值转换成完全相同的类型,而这里rf的引用目标类型是const T,但t的类型是T——两者的cv限定符(const/volatile)不同,所以类型并不完全一致,不符合恒等转换的要求。不过别担心,这种绑定非常高效,没有创建任何临时对象,rf直接指向t本身,只是给t加上了只读的访问限制。
2. 若不属于恒等转换,包含多少个标准转换?名称是什么?
这里只包含1个标准转换,叫做限定转换(Qualification Conversion)。
限定转换是C++标准转换里的一类,专门用来处理给类型添加const或volatile限定符的场景——这里就是把T类型的左值t转换成const T类型的左值,让它可以被const T&类型的引用绑定。再次强调:这种转换不会改变t本身的任何属性,只是调整了它的访问权限,所以引用能直接绑定到原对象,不需要额外的拷贝操作。
内容的提问来源于stack exchange,提问作者xmh0511
相关产品推荐
相关产品推荐

