Константность правильности слаба, и то, что вы нашли, является одной из многих причин.Концепция Constness захватывает только один бит семантики (изменить / не изменить) и делает это плохо и с довольно высокой стоимостью синтаксиса, что иногда даже требует дублирования кода.
Одна из проблем этой концепции заключается в том, что она нене масштабировать по составу: например, мне может быть интересно передать в функцию константный вектор неконстантных объектов, или неконстантный вектор константных объектов, или константный вектор константных объектов, и получить правильный синтаксис дорого... просто подумайте, как стандарт c ++ был вынужден ввести const_iterator
, потому что это, конечно, отличается от const iterator
.
За те годы, когда я перешел с фанатичной позиции использования константной корректности в каждом месте, где яможет наоборот использовать его только там, где я вынужден.Опыт научил меня, что код, который не одержим константной корректностью, становится чище, и что механизм константной корректности никогда не улавливает (по крайней мере для меня) какую-либо логическую ошибку, а только ошибки самого механизма правильной константности.К сожалению, правильность const - это одна из вещей, которую вы вынуждены использовать в C ++, потому что правила C ++ говорят об этом, и нет способа просто избежать ее использования.
Я знаю, что за этот пост я буду опущенно я предлагаю внимательно следить за тем, что вы читаете о C ++ на эту тему;держать мозг и судить объективно.Просто потому, что было бы хорошо, если бы что-то было правдой (например, правильность констант помогает программисту), к сожалению, это не значит, что это действительно так.
Неважно, насколько велико имя, подписавшее книгу.
Также помните, что если позиция требует, чтобы весь остальной мир был неправ, тогда, вероятно, неплохо бы быть хотя бы немного скептиком: большинство языков, даже те, которые родились после C ++, не реализуют эту концепцию.