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()
{
}
gcc
和clang
合并罚款。 DEMO
为什么呢?这是一个错误吗?
示例,由标准提供:
typedef int& A;
const A aref = 3; // ill-formed; lvalue reference to non-const initialized with rvalue
答案 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限定指针的声明有效。