笔记2:C++函数形参会忽略顶层const而保留底层const

C++:理解顶层const与底层const的区别
本文详细解析了C++中的顶层const和底层const的概念。顶层const用于修饰任何类型,表示对象不可变,而底层const则与指针和引用相关,限制对所指对象的修改。在形参中,顶层const对于非指针类型的影响不大,而对于指针类型,如果形参是顶层const,那么在函数内部不能改变指针所指对象,但可以改变指针本身。底层const在形参为指针时则具有实际意义,限制了对指针所指对象的修改。
  1. 复习顶层const与底层const
    顶层const对任意类型都适用,表示所修饰对象为常量
    底层const则与指针和引用等复合类型基本类型部分有关
    1)顶层const
    如const int a 、int * const p 都属于顶层const
    int* const p中 const修饰p,表示p为常量,而p内存储的是所指向对象的地址,地址不能被改变即不能改变指针的指向。
    2)底层const
    const int * pconst int &r等表示底层const
    (注意与const int a区分)
    此时,const修饰p所指向的对象为常量,不可改变所指对象,但可以改变指针本身,即可以改变指针的指向。

2.形参中的顶层const分为两种情况
1)形参为指针类型

此时,TestA与TestB的函数是等价的,TestB会忽略形参中的const属性,因为形参只是临时量,只是实参的副本,函数调用结束后就会被销毁,因此形参是否是常量不会影响主调函数及实参,但若是形参是指针或者引用时就会对实参产生影响。

2)形参为指针类型

形参为引用时,为底层const不能忽略,因此不作论述。
TestA时,形参为顶层const指不能修改tmp指针的指向,但调用函数会传入一个实参,即指定了tmp的指向,此时的const没有实际意义,因此会被忽略。(指针作为形参的初衷就是为了间接修改或传递实参,不需要改变指向)
TestB时,形参为顶层const指传入对象不能被改变,即形参指针所指对象应为常量,在函数体内就不能通过形参间接修改对象,具有实际意义。因此,底层const不能被忽略。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值