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 ;

Updated:

Leave a Comment