底层const

本文深入探讨了C++中底层const与顶层const的区别与应用,包括如何通过实参初始化形参时忽略顶层const特性,以及底层const对象与非常量对象之间的交互规则。文章详细解析了const形参与实参之间的相互作用,提供了关键实例来帮助理解底层const的概念及其实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

还记得大一刚学指针,引用这些的时候加上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;
 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值