What's wrong with const is that many programmers don't seem to be able to understand it completely, and a "half-const-correct" project simply does not work. This is what you need to know:
Foovs.const Foo(orFoo const)Foo&vs.const Foo&(orFoo const&)
- references-to-const bind to all kinds of things, while references-to-non-const don't
Foo*vs.const Foo*(orFoo const*)
- pointer variables can also be
Foo* constandconst Foo* const(orFoo const* const)
void Foo::mutator()vs.void int Foo::accessor() const
- but pointer members inside const member functions still point to non-const objects
- so we can accidentally return non-const data from a const-function
iteratorvs.const_iterator
- iterator variables can also be
const iteratorandconst const_iterator
Migrating to C++ from a language that has no const concept is quite hard, any many fail to see the point.