Мне нравится постоянная корректность ... в теории. Каждый раз, когда я пытался применять его строго на практике, он со временем ломался, и const_cast начинает ползти, делая код ужасным.
Возможно, я использую только шаблоны дизайна, но const всегда оказывается слишком широкой кистью.
Например, представьте себе простой механизм базы данных ... у него есть объекты схемы, таблицы, поля и т. Д. У пользователя может быть указатель "const Table", означающий, что ему не разрешено изменять саму схему таблицы ... но как насчет манипулирования данными, связанными с таблицей? Если метод Insert () помечен как const, то внутренне он должен отбросить константу, чтобы фактически манипулировать базой данных. Если он не помечен как const, он не защищает от вызова метода AddField.
Возможно, ответ состоит в том, чтобы разделить класс на основе требований к константности, но это имеет тенденцию усложнять конструкцию больше, чем я хотел бы для выгоды, которую он приносит.