2015-05-05 3 views
7

Когда я использовал (недавно выпущенный) Cppcheck 1.69 на свой код 1, он показал много сообщений, в которых я не ожидал ;-) Отключение noExplicitConstructor доказало, что все они были такого рода.Должен ли я действительно массово вводить явное ключевое слово?

Но я обнаружил, что я не только один с большим количеством новых сообщений Cppcheck, посмотрите на результаты анализа LibreOffice (который я могу показать на публике):

enter image description here

Что бы опытный программист сделал:

  • Подавить проверку?
  • Массовое изображение: explicit?

1Edit: Это конечно не мой код но код я должен работать, это унаследованный код: смесь C и C++ в нескольких (предварительно) стандартных вкусов, и это довольно большая база кода.

+6

Опытный программист использовал бы «явный» там, где это необходимо, и опускал его там, где требуются неявные преобразования. – juanchopanza

+15

Я не могу говорить для других программистов (опытных или других), но я бы использовал «явный», если я специально не хотел допускать неявные преобразования. Это уменьшает возможности для сюрпризов. –

+0

@juanchopanza Я начал использовать 'explicit' в новом коде, но должен ли я переработать старый код после этого предложения инструмента? – Wolf

ответ

8

Я был укушен в прошлом хитами производительности, представленными неявными преобразованиями, а также прямыми ошибками. Поэтому я стараюсь всегда использовать explicit для всех конструкторов, которые я не хочу участвовать в неявных преобразованиях, чтобы компилятор мог помочь мне поймать мои ошибки - и затем я стараюсь всегда добавлять комментарий «// подразумеваемый» для ctors, где я явно намерен использовать их как неявно преобразовывающие ctors. Я нахожу, что это помогает мне написать более правильный код с меньшим количеством сюрпризов.

... Так что я бы сказал «да, иди добавить explicit» - в конечном итоге ты будешь рад, что ты это сделал - это то, что я сделал, когда впервые узнал об этом, и я рад, что это сделал.

+1

Спасибо, что посмотрели на это. BTW: cppcheck все равно будет предупреждать об этом, если вы используете только комментарий. Что касается отключения его предупреждений, я использую inline-подавления, поэтому у меня есть функциональный комментарий об умышленных неявных преобразованиях. (мой любимый ответ до сих пор ;-)) – Wolf

Смежные вопросы