使用C ++ 11 Standard中的第8.5.3p4段和第5段,如何证明下面的代码片段无法编译?
char a = 'a';
char* p = &a;
const char* & r = p;
答案 0 :(得分:4)
首先,阅读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]。