你知道何时调用 const_reference front() const 吗?
2015-07-20 10:14
483 查看
哈哈哈,故意起了一个这样的问题;相信看过STL源码的人一定知道vector的两个关于front()的函数,但是他们的区别是什么我却比较模糊。
前天下午突然想起了什么时候来调用这个const_reference front const()呢?刚开始我写的时候我就觉得这两个front函数时一样的,所以我写的时候也没怎么太注意(这点其实不怎么好,应该对什么都要有探索的精神XD)。所以我还是将const_reference front() const类型放在我的smart_stl中了。但是当我调试的时候,却怎么也走不到这个const_reference front() const中。
这一次我又求助了一次蓝色巨巨。他给我的答案很简单:因为这个成员函数的类型是const型的,所以答案很明显:定义
而我一直没看全C++ primer,所以我对const成员函数的认识只是说该函数不能修改成员变量。我还记得前几个月一个工作的人和我说:我都工作这么多年了我还没看全C++ Primer,但是我觉得这并不是值得炫耀的;既然选择C++,我觉得这是进阶的毕竟之路;所以我准备在整体好好看一看C++ primer的第五版。
好了,现在开始说一下const:
因为对于成员函数,我们知道在每一个成员函数中都有一个额外的、隐含的形参this,在调用成员函数的时候,形参this初始化为调用成员函数的对象的地址。
那么const的成员函数中,const的作用就体现出来了:“const改变了隐藏的、额外的this形参的类型,在这样的成员函数中,this变成了指向const对象类的指针”。
这种方式使用const的函数称为常量成员函数。用于this是指向const对象的指针,const成员函数不能修改调用该函数的对象(即其中的成员函数)。
注释:const对象,指向const对象的指针或者是引用只能用于调用其const成员函数,如果尝试使用它们来调用非const成员函数,则是错误的。
但是对于普通的对象,既可以调用非const又可以调用const类型;首先调用的是非const类型,在没有非const类型的成员函数时,再调用非const类型也是不会出错的。但是const类型的必须调用const成员函数。
前天下午突然想起了什么时候来调用这个const_reference front const()呢?刚开始我写的时候我就觉得这两个front函数时一样的,所以我写的时候也没怎么太注意(这点其实不怎么好,应该对什么都要有探索的精神XD)。所以我还是将const_reference front() const类型放在我的smart_stl中了。但是当我调试的时候,却怎么也走不到这个const_reference front() const中。
这一次我又求助了一次蓝色巨巨。他给我的答案很简单:因为这个成员函数的类型是const型的,所以答案很明显:定义
const vector<int> a的时候就会调用的。虽然很简单的一句话,但是还是看出了巨巨的功底雄厚;
而我一直没看全C++ primer,所以我对const成员函数的认识只是说该函数不能修改成员变量。我还记得前几个月一个工作的人和我说:我都工作这么多年了我还没看全C++ Primer,但是我觉得这并不是值得炫耀的;既然选择C++,我觉得这是进阶的毕竟之路;所以我准备在整体好好看一看C++ primer的第五版。
好了,现在开始说一下const:
因为对于成员函数,我们知道在每一个成员函数中都有一个额外的、隐含的形参this,在调用成员函数的时候,形参this初始化为调用成员函数的对象的地址。
那么const的成员函数中,const的作用就体现出来了:“const改变了隐藏的、额外的this形参的类型,在这样的成员函数中,this变成了指向const对象类的指针”。
这种方式使用const的函数称为常量成员函数。用于this是指向const对象的指针,const成员函数不能修改调用该函数的对象(即其中的成员函数)。
注释:const对象,指向const对象的指针或者是引用只能用于调用其const成员函数,如果尝试使用它们来调用非const成员函数,则是错误的。
但是对于普通的对象,既可以调用非const又可以调用const类型;首先调用的是非const类型,在没有非const类型的成员函数时,再调用非const类型也是不会出错的。但是const类型的必须调用const成员函数。
相关文章推荐
- <a>标签的href和onclick属性
- 初识html5——试试博文编辑器
- html Javascript MD5
- js将控件隐藏及display属性
- [读书笔记]深入浅出NodeJS——Node中的异步I/O
- HTML5 LocalStorage 本地存储
- 【阅读】《head first html5》第一章——认识html5
- json字符串转为字典
- javascript单例模式的理解
- jquery学习记录一:jquery动态添加html元素后设置其绑定事件
- Jsp生成页面验证码的方法
- JavaScript权威指南_130_第15章_脚本化文档_15.6-创建、 插入、删除节点-删除和替换节点
- JS的基础类型与引用类型
- 邮箱屏蔽的邮件内容的样式<style></style>
- jsp 生成验证码代码
- jsp页面获取路径
- JS中常用函数(一)启动运行函数addLoadEvent
- 现在就开始使用AngularJS的三个重要原因
- [extjs5学习笔记]第三十八节 sencha CMD 6.0.0.220版本安装
- [extjs5学习笔记]第三十八节 sencha CMD 6.0.0.220版本安装