ChiLi_Lin 2018-01-07 15:26 采纳率: 60%
浏览 3720
已采纳

const int a = 1; 和 const int &a = 1; 的区别

请问下面两句的实质区别,还有为什么作为数组维度会报错。
const int a = 1;
const int& a = 1;

    const int a = 1;
    int b[a];           // 正确

    const int &a = 1;
    int b[a];           // 错误:“表达式必须含有常量值”
  • 写回答

9条回答 默认 最新

  • threenewbee 2018-01-07 15:38
    关注

    const int a = 1; 相当于a的值在编译的时候会替换为1
    int b[a];
    相当于
    int b[1];
    而const int &a = 1;
    a还是变量,只是这个变量不允许修改(编译器保证)

    而int b[变量]是否合法这个取决于你的编译器。
    对于gcc,这是成立的,对于vc++,这个不允许。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • bgxlj 2018-01-07 15:46
    关注

    int &a=1;直接不合法。
    如果是
    int a=1;
    const int &b=a;
    int c[b];
    那么是因为b是a的引用,而a本身不是常量,所以不合法。

    评论
  • hainulubaoguo 2018-01-07 16:12
    关注

    const int a = 1; <---,a是标准变量
    const int& a = 1,<---&a 表示a的地址,‘a’是1的引用。
    故,int b[a] 错误

    评论
  • lowkai 2018-01-07 16:31
    关注

    const int a = 1; 中的a是const int型的常量
    const int& a = 1;中a是const int&型的常量,一般情况下,系统是不让读取a内存中的值,所以调用int b[a];这句话会出错
    值得一提的是,int& a ;中的a表示取a的地址,而这个地址是int型的,如果要想赋值,一般用某地址赋值

    评论
  • 自律2019 2018-01-07 23:41
    关注

    数组是长度必须是常量或者具体的整形,因为编译器必须在编译的时候,就要直到要为他分配多少空间。

    评论
  • cdp2016 2018-01-08 01:05
    关注

    const int a = 1;
    是定义一个整型常量。
    const int & a = 1;
    是一个常引用,并不是一个常量。

    评论
  • loadingok 2018-01-08 01:29
    关注

    const定义必须是常量,常量是不能改变的;
    &a是引用,是个变量。

    评论
  • gs416501802 2018-01-08 07:50
    关注

    &a是引用,是个变量。

    评论
  • qq_33735292 2018-01-14 15:42
    关注

    数组长度不可以是个变量

    评论
查看更多回答(8条)

报告相同问题?

悬赏问题

  • ¥15 matlab有svec这个函数吗?
  • ¥15 无法调用VideoWriter_fourcc
  • ¥15 VB6.0无法加载网页验证码图片到picturebox中,求解。
  • ¥15 C#和GDAL对栅格处理
  • ¥15 我现在有一些关于提升机故障的专有文本数据,量也不多,我在label studio上进行了关系和实体的标注,完成了知识图谱的构造,那么我使用生成式模型的话,我能做哪些工作来写我的论文?
  • ¥15 电脑连不上无线网络如下诊断反馈应该如何操作
  • ¥15 telegram api 使用forward_messages方法转发消息时,目标群组里面会出现此消息来源,如何隐藏?
  • ¥15 关于#tensorflow#的问题:有没有什么方法可以让机器自己学会像素风格的图片
  • ¥15 Oracle触发器字段变化时插入指定值
  • ¥15 docker无法进入容器内部