Я знаю, что за это получу много отрицательных отзывов, но, на мой взгляд, польза от const-правильности в C ++ сильно преувеличена.Идея const является примитивной (она охватывает только один бит концепции ... изменить / не изменить) и сопряжена с высокой стоимостью, которая даже включает необходимость дублирования кода.Кроме того, он плохо масштабируется (рассмотрим const_iterators).
Что еще важнее, я не могу вспомнить ни одного случая (даже ОДНОГО), в котором механизм корректности констант помог мне, обнаружив истинную логическую ошибку, чтоЯ пытался сделать что-то, чего не должен делать.Вместо этого каждый раз, когда компилятор останавливал меня, в части объявления const возникала проблема (то есть то, что я пытался сделать, было логически правильно, но у метода или параметра была проблема в объявлении о константности).Во всех случаях я могу вспомнить, где я получил ошибку компилятора, связанную с правильностью const, исправление просто добавляло некоторые недостающие ключевые слова const или удаляло некоторые из них, которые были лишними ... без использования идеи const-правильности эти ошибки не были бытам вообще.
Мне нравится C ++, но, конечно, я не люблю до смерти каждую его часть (отступление: когда я беру интервью у кого-то, я часто задаю вопрос: «Какова роль, которую вы не делаете?»)примерно как ? "... если ответ" нет ", то просто означает, что тот, с кем я разговариваю, все еще находится на стадии фаната и явно не имеет большого реального опыта).
Есть много частей C ++, которые очень хороши, части, которые ужасны IMO (потоковое форматирование, например) и части, которые не ужасны, но ни логически красивы, ни практически полезны.Идея правильной константности - это IMO в этой серой области (и это не впечатление новичка ... Я пришел к такому выводу после многих многих строк и лет написания кода на C ++).Может быть, это я, но, по-видимому, постоянная корректность решает проблему, которой нет у моего мозга ... У меня много других проблем, но не проблема путаницы, когда я должен изменить состояние экземпляра, а когда нет.
К сожалению (в отличие от потокового форматирования) вы не можете просто игнорировать механизм правильной константности в C ++, потому что он является частью основного языка, поэтому даже если он мне не нравится, я все равно вынужден его соблюдать.
Теперь вы можете сказать ... хорошо, но каков ответ на вопрос?Это просто, что я не слишком с ума схожу от этой части семантического описания ... это всего лишь один бит и идет с высокой ценой;если вы не уверены и можете уйти, не объявляя постоянство, не делайте этого.Константность ссылок или методов никогда не помогает компилятору (помните, что он может быть юридически удален), и он был добавлен в C ++ просто как помощь программистам.Однако мой опыт подсказывает, что (учитывая высокую стоимость и низкую отдачу) это вовсе не реальная помощь.