Важной (если не основной) целью утверждений является документ инвариантов, которые должны храниться в определенной точке кода. Тот факт, что assert
может также прервать программу, если инвариант нарушен, просто обледенел, хотя и очень полезен. Я бы сказал, что в типичной программе 90% утверждений являются утверждениями, которые, очевидно, не могут потерпеть неудачу и никогда не потерпят неудачу. Другими словами, assert
является в значительной степени своего рода формализованным языком комментариев. Формализовано в том смысле, что эти «комментарии» написаны на одном языке, а остальная часть кода написана на (C / C ++), а не на простом английском.
В вашем примере кода есть утверждение о том, что указатель здесь не должен быть нулевым. Вот почему это там. В этом смысле это assert
не является избыточным.
Что касается потока выполнения, assert
всегда избыточен, поэтому утверждения, как правило, не компилируются в версии выпуска кода. Ничто не мешает вам сохранять утверждения в коде релиза, но обычно это делается путем введения особого вида «утверждения релиза». В любом случае, зависимость основных функций кода от действий, выполняемых утверждением, не является хорошей практикой программирования. Предполагается, что утверждения являются избыточными с точки зрения основной функциональности кода.