Предпочитайте `Expects()` для выражения предусловий
Причина
Чтобы ясно указать, что условие является предусловием, и обеспечить использование инструментов.
Пример
int area(int height, int width)
{
Expects(height > 0 && width > 0); // хорошо
if (height <= 0 || width <= 0) my_error(); // неясно
// ...
}
Примечание
Предусловия можно указать разными способами, включая комментарии, операторы if и assert(). Это может затруднить их отличие от обычного кода, затруднить обновление, затруднить обработку инструментами и может иметь неверную семантику (вы всегда хотите прерывать выполнение в отладочном режиме и ничего не проверять в промышленных запусках?).
Примечание
Предусловия должны быть частью интерфейса, а не частью реализации, но у нас пока нет языковых средств для этого. Как только языковая поддержка станет доступной (например, смотрите предложение по контрактам), мы примем стандартную версию предусловий, постусловий и утверждений.
Примечание
Expects() также можно использовать для проверки условия в середине алгоритма.
Примечание
Нет, использование unsigned — не хороший способ обойти проблему обеспечения неотрицательности значения.
Контроль
(Не применяется) Нахождение разнообразных способов утверждения предусловий нецелесообразно. Предупреждение об очевидно идентифицируемых (assert()) имеет сомнительную ценность при отсутствии языковых средств.