Const Correctness is not a contest of "how many 'const' can I put in there".
It is about using const wherever it makes sense.
Consider:
Code:
int foo( char * string );
versus
Code:
int foo( char const * string );
Or, for C++,
Code:
class foo
{
public:
int bar( std::string & s );
};
versus
Code:
class foo
{
public:
int bar( std::string const & s ) const;
The big problem with it is, if the implementor of a function or class did not label "const" where applicable, you cannot call those functions on constant arguments or objects, no matter whether the function actually changes the argument / object or not. So,
not working "const correct" here means that your clients
cannot work const-correct either, which is a royal PITA.
----
PS: All other things aside, of course a function can "cast away" any "const". The keyword is a promise, a contract, not an enforcement. (Just like "private:" doesn't really make member variables inaccessible / secret.) But you can't make promises or contracts if your workers don't make (or honor) them.