C++ const重载

来源:互联网 发布:mac版变色龙工具 编辑:程序博客网 时间:2024/05/17 13:43

在看STL unordered_map的源码时,看到下面一段代码的时候产生了疑惑:

       iterator find(const key_type& _Keyval){// find an element in mutable hash table that matches _Keyvalreturn (lower_bound(_Keyval));}const_iterator find(const key_type& _Keyval) const{// find an element in nonmutable hash table that matches _Keyvalreturn (lower_bound(_Keyval));}

这两个函数都是unordered_map的成员函数,乍一看,其函数名和形参列表都是相同的,只有返回值不同,然后心中升起疑问,这样的重载合法吗?

仔细看,发现第二个函数后面还有一个 const,然后去网上查了下资料,才知道还有constant重载。

声明类成员函数时,总有一个我们“看不见”的参数,它就是this指针,const重载的实质是,将this指针声明为了const类型,即上述两个函数的参数表其实还是不一样的。

下面举个简单的例子来说明:

class constOverload{public:int test(){cout << 1 << endl;return 1;};bool test() const{cout << 0 << endl;return false;};constOverload(){test(); //输出1const constOverload* p = this;p->test();//输出0}}


0 0