Стоит ли вставлять `const`-правильность - PullRequest
12 голосов
/ 29 сентября 2011

В настоящее время я сталкиваюсь с проектом C ++, написанным некоторыми старшими программистами, состоящим из около 400 файлов и 200 классов.

Код хорошо проработан, работает нормально и стабильно.

Хотя я добавляю некоторые функции, для меня это просто обычная практика заботиться о const -корректности.

Но если я начну объявлять свои новые функции-члены const, нет конца адаптировать старый код, чтобы все заработало.

  • Должен ли я потратить время, чтобы ввести const -корректность в этот код?
  • Еще хуже, я должен коснуться и изменить старый зрелый код и объяснитьстаршие, что я сделал во время обзора кода.Стоит ли это того?

Ответы [ 7 ]

5 голосов
/ 29 сентября 2011

Constкорректность - это своего рода дополнительный уровень по сравнению со статической типизацией, который призван облегчить разработку зрелого, надежного и надежного кода.Вы говорите, что у вас уже есть последнее.В этом случае обеспечение правильной константности в такой кодовой базе, по-видимому, не имеет существенной дополнительной выгоды с прагматической точки зрения.

2 голосов
/ 29 сентября 2011

Должен ли я потратить время, чтобы ввести const -корректность в этот код?

Если вы чувствуете, что можете сделать все за разумное время, конечно. const - правильность - хорошая вещь, поэтому, если вы можете настроить кодовую базу для ее правильного использования, это никогда не будет плохим.

Все сводится к тому, сколько у вас есть времени и что вы могли бы делать вместо этого, что больше относится к управлению проектами и больше подходит для программистов. SE .

Еще хуже, я должен прикоснуться и изменить старый зрелый код и объяснить старшим, что я делал во время проверки кода. Стоит ли это того?

Это, безусловно, того стоит им (и, соответственно, всем остальным). Похоже, они многому научатся в обзоре кода, и это фантастика!


Редактировать

Как справедливо указывает molbdnilo, это большое изменение, и вам обязательно нужно обсудить это в группе до . Это было бы более уместно, чем оставить его для проверки кода через две недели, когда вы уже сделали это.

2 голосов
/ 29 сентября 2011

Это стоит усилий ... Если у вас нет более важных дел.

1 голос
/ 29 сентября 2011

Это сложный вопрос. Модификация const правильности нетривиальна работа (как вы заметили). Если код в противном случае чистый и ремонтопригодный, это, вероятно, не должно быть предпринято легко. С другой В некоторых случаях корректность констант практически необходима, или быть, если все компиляторы применяют правило о не инициализации ссылка на неконстантный с временным.

Если вы не являетесь единственным владельцем кода, вам нужно сделать следующее: обсудить проблему с другими вовлеченными людьми, решить совместно важно ли это, и запрограммируйте время, необходимое для этого, если оно считается важным. То, что вы не должны делать, это просто начать представлять его самостоятельно, как «побочный эффект» изменений, которые вам было поручено сделать. Это решение на уровне проекта.

0 голосов
/ 29 сентября 2011

Существует два технических шага для обеспечения правильности const.

Прежде чем начать, вам необходимо привлечь членов вашей команды и объяснить преимущества const -корректности. Если вы не можете убедить своих товарищей по команде, на самом деле не стоит начинать это ...

Теперь, поскольку мы находимся на StackOverflow, а не на SE, я бы лучше сконцентрировался на техническом подходе.

Два шага взяты из того факта, что:

  • Вы не можете вызывать не const функцию для const объекта
  • Вы можете вызвать const функцию для неконстантного объекта

Таким образом:

  1. Пометить как const те функции, которые
  2. const - указать переменную / параметры / атрибуты

Первый шаг неинвазивен и уже дает свои преимущества, поскольку он предотвратит случайные изменения внутренних атрибутов класса в тегированном методе.

Даже если вы сталкиваетесь с небольшим сопротивлением в своей команде, вы все равно можете пометить методы, которые вы разрабатываете, или использовать их как const без каких-либо помех для остальной части команды.

0 голосов
/ 29 сентября 2011

Да. Как только вы преодолеете препятствия для преобразования вашего текущего кода в правильное, он станет второй натурой.

Кроме того, если вы начинаете следовать спецификации, такой как MISRA, требуется, чтобы ваш код был правильным (среди многих других).

0 голосов
/ 29 сентября 2011

да и да.Постоянная корректность - это хорошая вещь по ряду причин, среди которых она помогает предотвратить ошибки.На самом деле я уже обнаружил ошибки при применении константности в ситуации, аналогичной вашей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...