本篇内容介绍了“C++成员函数中const如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先我们要明白在C++中调用函数时存在两种方法,即传递值和传递引用。值传递时,调用函数时会创建入参的拷贝,函数中的操作不会对原值进行修改,因此这种方式中不需要使用 const 来修饰入参,因为其只是对拷贝的临时对象进行操作。传递地址时函数中的操作实际上是直接对原来的值进行修改,因此我们这里可以使用 const 修饰入参。当const修饰函数入参时表示该参数不能被修改,这个是最好理解的,比如一个函数的功能是拷贝,那么入参中的源文件都会用 const 修饰。接下来我们要关注的是这里 const 对于函数重载的作用,这里给出结论,欢迎大家讨论,对应按免费云主机域名值传递的函数来说 const 不会有重载的效果,但是传递指针和引用是会有重载的效果。函数重载的关键是函数的参数列表——即函数特征标(function signature)。如果两个函数的参数数目和类型相同,并且参数的排列顺序也相同,则他们的特征标相同,而变量名是无关紧要的。总结一下注意点:如果输入参数采用“值传递”,**由于函数将自动产生临时变量用于复制该参数,该输入参数本来就无需保护,所以不要加 const 修饰。**例如不要将函数void Func1(int x)
写成void Func1(const int x)
。如果参数作为输出参数,不论它是什么数据类型,也不论它采用“指针传递”还是“引用传递”,都不能加 const 修饰,否则该参数将失去输出功能(因为有 const 修饰之后,不能改变他的值)。如果参数作为输入参数,可以防止数据被改变,起到保护作用,增加程序的健壮性,建议是能加const尽量加上上述测试代码如下:const 修饰返回值时,表示返回值不能被修改。需要注意的是如果函数返回值采用“值传递方式”,由于函数会把返回值复制到外部临时的存储单元中,加 const 修饰没有任何价值。如果返回的是引用或指针,表示不能修改指向的数据。一般用得多的是返回值是引用的函数, 可以肯定的是这个引用必然不是临时对象的引用, 因此一定是成员变量或者是函数参数,所以在返回的时候为了避免其成为左值被修改,就需要加上const关键字来修饰。我们可以看如下代码示例:const 也可以用来放在函数末尾,用来修饰成员函数,表明其是一个常成员函数,这个对于初次接触C++的同学来说会有点陌生,不过这也是C++中严谨的地方。先看代码示例,学习任何编程技术都一定要写对应的代码,把它跑起来并分析结果才算是真正学会了,不会你只是知道了这个知识点,只知其然而不知其所以然。纸上得来终觉浅,绝知此事要躬行,这里的要躬行指的就是写代码。首先来看如下的代码上述代码会报错,因为show()
方法不是常成员函数,而 a 是常对象。本质上,成员函数中都有一个隐含的入参this
, 这个this
指的就是调用该方法的对象,而如果在函数的后面加上const
,那么这个 const 实际上修饰的就是这个this
。也就是说函数后加上了 const,表明这个函数不会改变调用者对象。这里借用侯捷老师的图片上面图片表明,在正常情况下:non-const对象可以调用const 或者 non-const 成员函数const 对象 只可以调用 const 成员函数补充一点,**如果成员函数同时具有 const 和 non-const 两个版本的话, const 对象只能调用const成员函数, non-const 对象只能调用 non-const 成员函数。**如以下代码示例这里也是建议能加 const 的时候就加。“C++成员函数中const如何使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注百云主机网站,小编将为大家输出更多高质量的实用文章!
相关推荐: springboot springsecuroty中注销和权限控制问题的示例分析
小编给大家分享一下springbootspringsecuroty中注销和权限控制问题的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参免费云主机域名考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!src/main/java…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。