使用 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 中的两个项目符号都不适用,并且代码格式不正确。
两个要点是:
如果引用是左值引用和初始值设定项表达式...[条件不适用]
否则,引用应是非易失性常量类型的左值引用(即,cv1 应为 const [IT ISNT](,或者引用应为右值引用 [IT ISNT]。