CV限定参考

时间:2014-09-28 08:30:32

标签: c++ gcc clang

8.3.2 / 1:

  除了cv限定符之外,

Cv限定的引用是不正确的   通过使用typedef-name(7.1.3,14.1)或   decltype-specificer(7.1.6.2),在这种情况下cv限定符是   忽略

int a = 5;
const int &b = a;

int main()
{
}

gccclang合并罚款。 DEMO

为什么呢?这是一个错误吗?

示例,由标准提供:

typedef int& A;
const A aref = 3; // ill-formed; lvalue reference to non-const initialized with rvalue

1 个答案:

答案 0 :(得分:1)

在您的示例中,您没有cv限定的引用。标准的引用意味着以下声明形成的声明

int a = 5;
const int & const b = a;

这里b是一个cv限定的引用,代码片段格式不正确。

至于你的代码片段,它会声明对const对象的引用。

此代码段生成错误

typedef int& A;
const A aref = 3; 

因为它相当于

int & const aref = 3; 

比较两个声明

会更清楚
int x;
int * const p = &x;
int & const r = x;

当cv限定引用的声明格式错误时,cv限定指针的声明有效。