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 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
Used with Pointers
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. :)