使用 C++11 标准中的第 8.5.3p4 和 p5 段,我如何证明下面的代码段无法编译?



使用 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 的左值

这两种类型与引用无关或与引用不兼容。

cv1cv2都是空的。

初始值设定项表达式没有类类型

cv1不是恒常量。

因此,8.5.3p5 中的两个项目符号都不适用,并且代码格式不正确。

两个要点是:

  1. 如果引用是左值引用和初始值设定项表达式...[条件不适用]

  2. 否则,引用应是非易失性常量类型的左值引用(即,cv1 应为 const [IT ISNT](,或者引用应为右值引用 [IT ISNT]。

最新更新