c++ - 为什么不编译下面的数组的 const 左值引用?
问题描述
const 左值引用int(const& crb)[3] = b;
无法编译。为什么?
#include<iostream>
int a = 1;
int b[3] = { 1, 2, 3 };
int main(){
int& ra = a; // Ok
int const& cra = a; // Ok
int(&rb)[3] = b; // Ok
int(const& crb)[3] = b; // Doesn't compile
}
g++ 发出的错误消息:
error: expected primary-expression before 'int'
int(const& crb)[3] = b;
^~~
解决方案
参考总是不变的,你不能改变参考。int const (& crb)[3] = b;
这里我们引用了 const int 数组,我们也可以这样写 const int (& crb)[3] = b;
。
指针有区别,指针可以改
const int *p;
- 这里是 const int 上的指针
int const *p;
- 这里是 int 上的 const 指针
const int const *p;
- 这里是 const int 上的 const 指针