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

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

  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 * p 、const 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不能被忽略。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1331249.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-12
下一篇 2022-06-12

发表评论

登录后才能评论

评论列表(0条)

保存