您的位置:首页 > Web前端

你知道何时调用 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型的,所以答案很明显:定义
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成员函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: