使用 C++11 标准中的第 8.5.3p4 和 p5 段,我如何证明下面的代码段无法编译?
char a = 'a';
char* p = &a;
const char* & r = p;
首先,阅读 8.5.3p5 的一个常见错误是忽略它有两个顶级要点。您可能不小心将“否则”的最后出现误读为第三个要点 - 但它实际上是第二个要点的子部分(也从“否则”开始)。
char a = 'a';
char* p = &a;
好的
const char* & r = p;
所以我们有一个左值引用来cv1 T1 = pointer to const char
绑定到类型的左值cv2 T2 = pointer to char
这两种类型不与引用相关或不兼容。
cv1
并且cv2
都是空的。
初始化表达式没有类类型
cv1
不是常量。
因此,8.5.3p5 中的两个要点都不适用,并且代码格式不正确。
两个要点是:
如果引用是左值引用和初始化表达式... [条件无法应用]
否则,该引用应为对非易失性 const 类型的左值引用(即,cv1 应为 const [IT ISNT]),或者该引用应为右值引用 [IT ISNT]。