What's the difference between a const member function and a non-const member function?

后端 未结 5 1964
清歌不尽
清歌不尽 2020-11-29 11:17

I am very confused about the const version and non-const version member function like below:

value_type& top() { return this.item }
const value_type&         


        
5条回答
  •  孤城傲影
    2020-11-29 11:43

    In short, they're used to add 'const correctness' to your program.

    value_type& top() { return this.item }
    

    This is used to provide mutable access to item. It is used so you can modify the element in the container.

    For example:

    c.top().set_property(5);  // OK - sets a property of 'item'
    cout << c.top().get_property();  // OK - gets a property of 'item'
    

    One common example for this pattern is returning mutable access to an element with vector::operator[int index].

    std::vector v(5);
    v[0] = 1;  // Returns operator[] returns int&.
    

    On the other hand:

    const value_type& top() const { return this.item }
    

    This is used to provide const access to item. It's more restrictive than the previous version - but it has one advantage - you can call it on a const object.

    void Foo(const Container &c) {
       c.top();  // Since 'c' is const, you cannot modify it... so the const top is called.
       c.top().set_property(5);  // compile error can't modify const 'item'.
       c.top().get_property();   // OK, const access on 'item'. 
    }
    

    To follow the vector example:

    const std::vector v(5, 2);
    v[0] = 5;  // compile error, can't mutate a const vector.
    std::cout << v[1];  // OK, const access to the vector.
    

提交回复
热议问题