Подтвердить что ты не робот

Стоит ли вставлять `const`-correctness

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

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

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

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

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

Ответ 1

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

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

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

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

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


Изменить

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

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

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

Два шага сделаны из того, что:

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

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

  • Отметьте как const те функции, которые
  • const -изменить переменную/параметры/атрибуты

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

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