Const--来自C++ Primer 2.4的总结

本文详细解释了C++中const关键字的用法,包括顶层const和底层const的区别,以及它们在指针、引用和对象拷贝中的角色。特别强调了const对象的初始化、访问权限和不同类型const的交互规则。
摘要由CSDN通过智能技术生成
  • const必须初始化

  • 默认情况下,const对象被设定为仅在文件内有效;若对const变量添加extern关键字,则外部文件也可访问该变量。

  • const引用:

    //不可以通过r1修改ci
    const int &r1 = ci;
    //初始化常量引用时可以使用非常量对象、任意表达式、字面值(右值)
    const int &r2 = 10;
  • 顶层const和底层const

    • 顶层const:表示任意的对象是常量

      表示指针本身是一个常量(常量指针)

      int * const p1;

      常量指针必须初始化,一旦初始化,它的值(即存放在指针中的地址)就不能改变

    • 底层const:与指针/引用等复合类型有关

      表示指针所指的对象是一个常量(指针常量)

      const int *p2

      常量对象只能用常量指针/引用;但常量指针/引用可以指向任意值,但指向的对象不同通过其他途径改变其值。

    • 执行对象的拷贝操作时:顶层const不受限制;拷入和拷出对象必须具有相同的底层const资格,或者是非常量拷贝给常量。

      用通俗易懂的话说就是,常量指针/引用可以指向/绑定非常量对象,但是非常量指针/引用不可以/绑定指向常量对象。

      int i=0; 
      const int ci=42;//顶层const
      const int *const p3=&ci;//顶层+底层cosnt
      const int *p2=&ci;//底层const
      int *p=p3;//错误,p3有底层const,但是p没有
      p2=p3;//p2,p3都有底层cosnt,p3顶层不影响
      p2=&i;//正确,非常量可以指向常量
      int &r=ci;//错误,非常量不可以绑定常量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值