I found this issue has been one of those that made me open Google a lot. So I figured a summary in my blog might be great.
Used with Functions
const typename function_name(...) const ;
The first const applies to the returned type instance (this will not have any effect on built-in types). Thus, when it is used on any non-built-in types, the caller of the function is not suppose to or able to change returned value.
The latter one appears when this function is a member function of some object. It says that in this function, no member variables will be modified, unless those declared as mutable.
Used with Pointers
const typename * const var_name ;
The first one means that the pointer is pointing to a const variable of type typename, that is the thing it points to has a constant value and should not be changed. Note that it is the same if it is written as typename const* var_name.
The second one means that the pointer itself is immutable, that is, we cannot change what it points to.
Test Your Understanding!
Now, try to explain the following mad example. :)
const T* const function_name(
const K* const
ptr
) const ;
Leave a Comment