鉴于
T w;
T& t = w;
如何使用8.5.3p4和p5建立r
绑定到t
以下T
,即T&
与T& r = t;
的参考兼容?< / p>
T
观察T&
与T&
的类型不同,既不是T
的基类,依据8.5.3p4我们也不能说T&
}是与{{1}}相关的参考。
答案 0 :(得分:2)
短篇小说:
T&
与<{1}}的不参考兼容,但这与此无关。
T
与T
(本身)引用兼容。该事实用于应用8.5.3p5。请注意8.5.3p5 “引用到类型cv1 T1 ...”的前几个单词。所以T
,而不是cv1 T1 is T
。
长篇故事:
cv1 T1 is T&
T& r = t;
是t
类型的表达式(引用是从表达式条带化的。表达式T
的类型不是t
,尽管事实上类型为lvalue-reference to T
变量名称是)具有值类别lvalue
。
T&r = t;
是一个声明,声明并初始化r
类型的变量lvalue-reference to T
,使用前面提到的表达式进行复制初始化。
此初始化的操作是直接引用绑定。
在这种情况下,T
与引用相关且与引用兼容,因为相同类型与相同的cv限定。
8.5.3p4只定义了这两种类型的关系。
现在,再看看为您的具体示例重写的8.5.3p5:
对“T”类型的引用由“T”类型的表达式初始化:
如果引用是左值引用和初始化表达式
- 是左值,“T”与“T”引用兼容
所以T
这里是值类型,而不是引用类型。
答案 1 :(得分:2)
表达式'T&amp; r = t;“标准中的类型T,而不是T&amp;,5/5,如下:
如果表达式最初具有“引用T”类型(8.3.2, 8.5.3),在进一步分析之前将类型调整为T.表达式指定由引用表示的对象或函数, 并且表达式是左值或右值,具体取决于 表达