У константных объектов можно вызвать только константные методы, поэтому и требуется помечать все методы, которые не изменяют данные.
UPD. Судя по ответам, половина вообще не понимает о чём вопрос. Дабы развеять все непонятки, чутка подробнее.
class foo {
int val;
int get_counter;
public:
foo(int v) : val(v), get_counter(0) {}
int get() { ++get_counter; return val; }
int get() const { return val; }
int get_counter() const { return get_counter; }
};
foo f(123141);
const foo f2(f);
f.get(); // вызывается нормально
f.get_counter(); // вызывается нормально, даже с пометкой const, даже в случае, если нет не const версии
f2.get(); // без const версии метода была бы ошибка компиляции
f2.get_counter(); // вызывается без проблем
Ну а теперь осталось понять, зачем это всё надо. А всё просто, да, исключить человеческий фактор (как сказано до меня). Если в мелкой библиотеке без этого еще как-то пережить можно, то в большой уже нет.
Ну и если идти дальше, то стандартная библиотека активно использует const объекты. И без адекватного понимания работы модификатора const лезть в C++ вообще не следует.