What is the use of const overloading in C++?

前端 未结 5 2003
盖世英雄少女心
盖世英雄少女心 2020-12-12 14:30

In C++, a function\'s signature depends partly on whether or not it\'s const. This means that a class can have two member functions with identical signatures except that on

相关标签:
5条回答
  • 2020-12-12 14:49

    Have a look at the behaviour of std::map::operator[]. The const version throws an error if you try to reference an invalid key, but the non-const version does an insert. The insertion behaviour is much handier than having to use std::map::insert (and will do an overwrite, moreover) but can't work for a const map.

    0 讨论(0)
  • 2020-12-12 14:51

    You might want to use it to decide whether or not to return a const reference to an object or not. The STL's containers use a const overloaded begin() and end() function to decide whether to return a const_iterator or a normal iterator.

    0 讨论(0)
  • 2020-12-12 14:58
    #include <iostream>
    using namespace std;
    class base
    {
    
    public:
    void fun() const
    {
        cout<<"have fun";
    }
    void fun()
    {
        cout<<"non const";
    }
    
    };
    int main()
    {
        base b1;
        b1.fun(); //does not give error
        return 0;
    }
    

    Here compiler won't give any error, because in case of const functions compiler converts this pointer to const this*. this third argument separates these two functions.

    0 讨论(0)
  • It's there so you can make the compiler enforce whether you return a const object or a regular one, and still maintain the same method signature. There's an in-depth explanation at Const Correctness.

    0 讨论(0)
  • 2020-12-12 15:06

    This really only makes sense when the member function returns a pointer or a reference to a data member of your class (or a member of a member, or a member of a member of a member, ... etc.). Generally returning non-const pointers or references to data members is frowned upon, but sometimes it is reasonable, or simply very convenient (e.g. [] operator). In such cases, you provide a const and a non-const versions of the getter. This way the decision on whether or not the object can be modified rests with the function using it, which has a choice of declaring it const or non-const.

    0 讨论(0)
提交回复
热议问题