开发者社区> 技术小美> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

[C++再学习系列] 指针和引用

简介:
+关注继续查看

原题目:使用合理的引用参数实现接口的自说明

  在引用和指针的小文中,主要讨论了引用和指针语法层面上的区别。本文将侧重如何更加合理地利用语言对引用所作限制。

  在C++中,指针是最灵活的,也是最危险的。在编程当中,可使用const对指针做限制。

const Type * var;            //var指针变量指向一个const Type的对象,因为对象做了const限制,故该指针只能调用Type类中,带const限制的接口。最佳情况下,该指针不会改变Type对象的内部状态。

const Type * const var;  //var指针变量指向一个const Type的对象,同上,最佳情况下,该指针不会改变Type对象的内部状态。 另外指针的类型为const指针,也就是该指针变量并不能重新赋值(同引用)。

  那么现在有个问题:调用Type的析构函数算不算改变Type对象的状态?

  个人理解,析构一个对象肯定是改变该对象的状态。那么如果说const限制意味着不能改变对象状态,那么编译器理应对delete 指向const Type的对象操作报错。不过编译器并没有这么做。为什么?假设编译器限制析构const Type的对象,由于析构函数本身的特殊性,这将导致所有的const Type对象都无法析构。这是极其不合理。因此,不管指针做什么样的限制,都无法限制调用者直接delete 指针所指向的对象。注:thinkingfor的解释:const与对象的构造与析造无关。

  那么如果使用const引用能否限制用户的不合理行为吗?这是可以的。引用本身仅仅是变量的别名,并不控制对象的生存期。对于非const的引用,使用者可以方便地改变引用对象的状态;如果想让用户无法改变引用对象的状态,只要加上const限制即可。

  区别了const引用和非const引用之后,很容易想到,将传入参数声明为const引用,将传出的参数声明为非const引用。另外,程序中还经常使用函数返回值来传递对象的内部变量。同样的道理,我们也可以通过将返回值限制为const引用来限制使用者不小心改变对象的内部状态。对于const的返回值,如果使用者需要改变对象状态,那么可以通过拷贝构造函数来初始化一个新对象。也就是说,const返回值可以强制用户使用新的对象拷贝,从而避免易错的对象clone。

  当然,如果使用引用来传递参数,为了易用性,应该编写拷贝构造函数和重载赋值运算符。

----------------------------------------------------

兄弟的公司:立即购--手机购物,诚信网购

欢迎转载,请注明作者和出处。


本文转自 zhenjing 博客园博客,原文链接:http://www.cnblogs.com/zhenjing/archive/2010/11/12/1875935.html   ,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
学习
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/79028856 https://github.
603 0
学习
测试<br />数据源:<br />数据大小:38.7 KB<br />字段数量:10<br />使用组件:全表统计,读数据表<br />
501 0
css学习--css基础
学习慕课网笔记,课程:http://www.imooc.com/code/2024 1.css选择器 子选择器:parent>child 子选择器是指选择parent的范围内的第一个子元素。
925 0
C++学习笔记-指针和引用的注意事项
一:指针 1指针变量的定义,由数据类型后跟星号,再跟指针变量名组成。2&表示一个实体的地址,此符号可用来对指针变量初始化和赋值如:int count = 18;int * iptr = &count;int * ip;ip = &count; 3 *除了可以用来定义指针,标致乘法运算符,还可以做...
683 0
+关注
6819
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载