首页 > 解决方案 > 为什么不编译下面的数组的 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;
^~~

标签: c++arraysreference

解决方案


参考总是不变的,你不能改变参考。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 指针


推荐阅读