Предпочитайте `Ensures()` для выражения постусловий
Причина
Чтобы ясно указать, что условие является постусловием, и обеспечить использование инструментов.
Пример
void f()
{
char buffer[MAX];
// ...
memset(buffer, 0, MAX);
Ensures(buffer[0] == 0);
}
Примечание
Постусловия можно указать разными способами, включая комментарии, операторы if и assert(). Это может затруднить их отличие от обычного кода, затруднить обновление, затруднить обработку инструментами и может иметь неверную семантику.
Альтернатива: Постусловия вида «этот ресурс должен быть освобождён» лучше всего выражаются с помощью RAII.
Примечание
В идеале, этот Ensures должен быть частью интерфейса, но это нелегко сделать. Пока мы помещаем его в определение (тело функции). Как только языковая поддержка станет доступной (например, смотрите предложение по контрактам), мы примем стандартную версию предусловий, постусловий и утверждений.
Контроль
(Не применяется) Нахождение разнообразных способов утверждения постусловий нецелесообразно. Предупреждение об очевидно идентифицируемых (assert()) имеет сомнительную ценность при отсутствии языковых средств.