底层const

还记得大一刚学指针,引用这些的时候加上const被搞得有点头晕,总是当时记得,过段时间就忘了,断断续续,没理解透,,,

今天整理了一下,把自己的理解俸上。

什么是底层const?

1.底层const是与引用或指针等复合类型的基本类型相关的const,对应的就有顶层const,顶层const 就是任意的对象是常量。

狭隘的理解:底层const表示指针指向的对象是常量,而顶层const就是指针本身是常量。


2.对于底层const要特别小心,可以这样去理解:

底层const的指针或引用,仅仅是指针或引用自己觉得自己指向了一个常量,所以自觉的不去改变所指向对象的值。const属性即常量属性在通过改变所指对象的时候体现出来,编译就会出错。它的本质就是只读的。


const形参和实参

1.实参初始化形参时会忽略掉顶层const:

例如:

const int i = 1; int j = 2;

void fun(const int){} 

i 和j都可以传给形参,顶层const自动忽略了。所以,注意:void fun(const int) 和void fun(int)是一样的!


2.可以使用非常量去初始化一个底层对象,但是反过来,用一个底层对象去初始化一个非常量就会出错。

注意:

这里的非常量是指去掉const属性的对象,比如 对于const int *p ,int*p1就是非常量,int p2就不是;

对于 const string & s, string &s1才是非常量,而string s2就不是我们讨论的非常量。

#include<iostream>
#include<string>
using namespace std;
 int main(int argc, char* argv[])
 {
  string  s1 = "hello";
  const string & s2= s1;                  //s2是s1的常量引用 
  const string & s = s2;                   //可以
  //string &s = s2;                            // 底层对象s2 初始化 同为引用的非常量对象s  会报错 

        string s3 = s2;                             //这是可以的!!!

        cout<<s3<<endl;
  cout<<s<<endl;
  return 0;
 }


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值