Этот вопрос вдохновлен вопросом о final
в Java .
В C / C ++ я должен использовать, const
когда это возможно?
Я знаю, что уже есть связанный вопрос об использовании const
в параметрах . К сожалению, этот вопрос и его ответы не полностью отвечают на мой вопрос, потому что он касается только параметров функции, но я также хотел бы узнать о других случаях (например, локальные переменные).
Кроме того, почти все ответы на этот вопрос говорят, что мы должны использовать, const
потому что он содержит полезную информацию о доступности переменных. Но это, кажется, вступает в противоречие с ответом об использовании final в Java, который final
может быть лишним, если он не содержит дополнительной информации, и поэтому его следует опустить, чтобы код был коротким и чистым.
Итак, я должен использовать, const
когда это возможно? Если так, то почему совет const
в C ++ отличается от совета final
в Java?
источник
final
иconst
не имеете таких же гарантий.Лично у
const
меня уходит очень мало времени на написание, и очень мало времени на чтение, обычно гораздо меньше, чем требуется, чтобы проверить, изменяет ли какой-либо код переменную, и это фактически мешает мне писать ошибки (кто-нибудь когда-либо увеличивал свой конечный итератор случайно? Так далее)Я также обнаружил, что строгость в отношении использования констант ведет меня к лучшему коду другими способами, такими как создание вспомогательных функций для нетривиальной инициализации.
источник
Я собираюсь не согласиться с другими авторами и рекомендую не использовать верхний уровень
const
для локальных переменных и параметров. (Ссылки и указатели на const, т.const T&
Е. Разные, и вы должны использовать их для правильности всегда, когда это уместно.)Преимуществами верхнего уровня
const
являются:Недостатки:
Не может использоваться с переменными «псевдо-const», т. Е. Переменными, которые инициализируются некоторым образом более сложным, чем прямое построение, но не модифицируются после, например, с использованием
getline
:Предотвращает оптимизацию перемещения при вызове функции и возврате:
Я работал над кодовой базой, где
const
часто использовался local , и мне это показалось бесполезным, но он заполнил код тонкой пессимизацией, как описано выше. Я лично предпочитаю применять общую политику изменения переменных настолько редко, насколько это возможно, и делать функции достаточно маленькими, чтобы использование переменной было очевидным, и даже если она изменена, сложность функции достаточно мала, чтобы сделать ее -эмиссионный.источник
const
местные жители: потому что это предотвращает технические изменения, а не только концептуальные изменения.const
Ключевое слово должно использоваться для локальных переменных, так же , как параметры. Это полезно, потому что:const
написание которого занимает всего секунду, так что это не страшно.Обратите внимание, что здесь нет правильного / неправильного ответа. В вашей ссылке, ответчик, который высказал наибольшее количество голосов,
final
не должен использоваться локально. Однако следующий автор настоятельно рекомендовал это сделать.Если ваша функция проста и тривиальна , вы не должны добавлять,
const
потому что все понимают ваше намерение. Однако, если логика в вашей функции нетривиальна, вы должны использовать ключевое слово. Помните, что терять нечего.источник