``const`` member functions are the member functions that do not modify the object they are called on.
While returning a non-const reference or a pointer from such a function does not in itself modify the object, it creates an opportunity for modification in the future. In particular, it enables the code that uses this member function to modify a ``const`` object.
In some cases you need to be able to read the field from ``const`` objects and mutate it in non-``const``, as is often the case with container objects, like ``std::vector``. Consider using ``const``-overloading in this case.