-6

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

char a = 'a';
char* p = &a;
const char* & r = p;
4

1 回答 1

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 中的两个要点都不适用,并且代码格式不正确。

两个要点是:

  1. 如果引用是左值引用和初始化表达式... [条件无法应用]

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

于 2013-07-04T00:22:55.993 回答