使用C ++ 11标准中的第8.5.3p4和第5段,如何证明下面的代码段不能编译?

时间:2013-07-03 21:49:58

标签: c++ c++11 standards

使用C ++ 11 Standard中的第8.5.3p4段和第5段,如何证明下面的代码片段无法编译?

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

1 个答案:

答案 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类型的左值

这两种类型不与参考相关或参考兼容。

cv1cv2都是空的。

初始化表达式没有类类型

cv1不是常量。

因此,8.5.3p5中的两个要点都不适用,且代码格式不正确。

两个要点是:

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

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

  4.