shadow3D 2017-04-12 02:29 采纳率: 0%
浏览 2005
已结题

请问引用有顶层const和底层const之分吗,还是只有底层const?

最近在看《C++ primer》英文版第69页说到复合类型、常量和auto,看的有点晕乎乎。。。
不知道有没有人能给更通俗的解释下。
还有就是想问下关于引用的顶层const和底层const的疑问。
目前不确定引用是否有顶层const,如果有顶层又表示什么意思呢?引用不是初始化后就不能再重新引用么,难道是默认一定有顶层const吗?不知道这样理解是否正确,还请各路大能指教,多谢!

  • 写回答

2条回答 默认 最新

  • Davidation 2017-04-13 07:57
    关注

    个人理解,仅供参考:
    1.顶层const和底层const的概念仅仅针对指针。
    顶层const指针意味着指针指向某一个对象之后,指针不能被修改以指向其他对象;
    底层const指针意味着不同通过解引用的方式来修改该指针指向的对象,比如“*p = ..”是不被底层const所允许的。
    2.引用没有顶层或底层const相关概念。
    普通的引用经过初始化之后绑定到一个对象,所有对引用的操作都是对被绑定的对象的操作。
    3.但是:
    以下这点类似于指针的顶层const性质:
    普通引用一经绑定,就不能更改绑定对象。这也是为什么引用必须被显式初始化的原因(因为如果没有显式初始化,则引用被理解为绑定了未定义的一个变量)。
    以下这一点类似于指针的顶层const性质:
    const引用一旦绑定一个对象,则不能用这个引用去修改该对象(但是通过其他方式修改该对象是可以的)。
    举例:
    int i = 1,j = 2;int &k = i; k = j;(这是可以的,结果i = j = 2);
    int i = 1;const int &k = i;k = 2;(这是不可以的,因为这是一个const引用).
    int i = 1;const int &k = i;int &m = i;m = 2(这是可以的,因为没有通过const引用k去修改i).

    评论

报告相同问题?

悬赏问题

  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀