在标准中使用 8.5.3p4,如何确定 T 与 T&的参考兼容?
Using 8.5.3p4 in the Standard, how do I establish that T is reference-compatible to a T&?
给定
T w;
T& t = w;
如何使用 8.5.3p4 和 p5 确定r
绑定到下面的t
,即T
与T&
的引用兼容?
T& r = t;
观察T
与T&
不是同一类型,也不是T&
的基类,所以根据8.5.3p4我们不能说T
与T&
有关。
'T& r = t;"中的初始值设定项在标准中具有 T,而不是 T&,按 5/5 计算,如下所示:
如果表达式最初具有"对 T 的引用"(8.3.2, 8.5.3(,在进行任何进一步分析之前,将类型调整为T。表达式指定由引用表示的对象或函数, 表达式是左值或 x值,具体取决于 表达。
短篇小说:
T&
与T
不兼容,但这并不相关。
T
与T
(本身(的引用兼容。 该事实用于应用 8.5.3p5。 请注意 8.5.3p5 的前几个单词">对类型 cv1 T1 的引用......"。 所以cv1 T1 is T
,而不是cv1 T1 is T&
.
说来话长:
T& r = t;
t
是类型 T
的表达式(引用从表达式中条带化。 表达式的类型不是lvalue-reference to T
t
尽管它命名的变量的类型是(的值类别为 lvalue
。
T&r = t;
是一个声明,它声明和初始化一个lvalue-reference to T
类型的变量r
,用前面提到的表达式进行复制初始化。
此初始化的操作是直接引用绑定。
在这种情况下,T
既与参考相关,又与自身与参考兼容,因为它是具有相同 cv 资格的相同类型。
8.5.3p4 只定义了这两种类型关系。
现在,再看看重写到您的特定示例的 8.5.3p5:
对类型"T"的引用由类型"T">的表达式初始化:
如果引用是左值引用和初始值设定项表达式
- 是一个左值,"T">与"T"引用兼容
因此,此处T
是值类型,而不是引用类型。
- 如何确定我已使用非编码文件到达 EOF?
- C++错误消息*成员参考.**初学者*
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 在决定是通过参考还是通过价值时,尺寸真的是一个问题吗
- 如何在C++中确定文本文件中的元素是字符还是数字
- Python中的for循环与C++有何不同
- 参考资源文件VC++中的$(SolutionDir)
- 不确定有关入门C++参考的描述
- 调用gluPerspective和gluLookAt给了我一个不确定的参考
- 当通过函数中的参考调用时,标识符不确定
- Eclipse CDT不确定的参考(通过mysys2下载的软件包)
- G 也抱怨不确定的参考文献,即使包括库
- 不确定如何修复;非静态成员参考必须相对于特定对象
- CLION不确定对功能的参考
- 尽管链接正确,但不确定的提升参考
- CXX11不确定的参考文献6.2.0
- 包括未确定的VAR错误,圆形参考C
- 第一个C 库:我不确定在哪里参考并声明我的变量
- 什么是C++中的不确定行为?它与未定义的行为有何不同
- 在标准中使用 8.5.3p4,如何确定 T 与 T&的参考兼容?