Неплохая практика их использования?
Если злоупотребление, да, в частности assert
.
Оскорбление в зависимости от этих assert
утверждений должно быть активным. Вы никогда не должны зависеть от assert
, чтобы сделать что-либо, потому что код можно скомпилировать с помощью NDEBUG
, а затем assert
ничего не делает. Производственный код часто компилируется с NDEBUG
, определенным для обеспечения исчезновения этих операторов assert
.
Если вы не пишете одноразовую программу, которая не будет проживать более суток или двух, вы не должны использовать для проверки ввода пользователя. Пользователям все равно, где код не удался, а печатное сообщение выглядит как иностранный язык для многих пользователей. Он не сообщает пользователю, как исправить ошибку. Это также очень неумолимо, по дизайну. Сообщение, выпущенное в ответ на ошибку ввода пользователя, должно быть сообщением, которое сообщает пользователю, как исправить проблему. Лучшее действие после сообщения - предложить пользователю способ исправить ошибку. Если это невозможно сделать, и если единственным жизнеспособным ответом является завершение программы, программа должна прекратиться. По дизайну assert
не приводит к чистому отключению. Он называет abort()
, а не exit()
.
Одним из последствий abort()
на многих машинах является создание дампа сердечника. Дамп ядра - отличное сообщение об ошибке для программиста. С дампом ядра программист может использовать отладчик, чтобы увидеть, что пошло не так в деталях. Недостатком abort()
является то, что вещи не очищены. Abort "завершает программу без выполнения деструкторов для объектов с автоматическим или статическим хранением и без вызова функций, переданных в atexit()
."
Нижняя строка: нормально (и хорошо) использовать assert
для проверки ошибок программирования, но только в непроизводственной настройке. Используйте что-то еще, чтобы проверить ошибки пользователя.
'static_assert' - это декларация, встроенная в основной язык. Это не распространяется ни на что, потому что, если это не удается, компиляция прекращается. – jrok
@ KerrekSB Я спросил ** три ** ясных вопроса, пожалуйста, уделите время, чтобы прочитать их, прежде чем делать предположение. – Oleksiy
Вы используете assert, чтобы указать, что в вашей логике программирования есть ошибка, и что она должна быть исправлена в коде. 'if' используется для разветвления между различными логическими путями в коде. Это большая разница – Default