Указывайте предусловия (если они есть)
Причина
Аргументы имеют смысл, который может ограничивать их правильное использование в вызываемой функции.
Пример
Рассмотрим:
double sqrt(double x);
Здесь x должен быть неотрицательным. Система типов не может (легко и естественно) выразить это, поэтому мы должны использовать другие средства. Например:
double sqrt(double x); // x должен быть неотрицательным
Некоторые предусловия могут быть выражены как утверждения. Например:
double sqrt(double x) { Expects(x >= 0); /* ... */ }
В идеале, этот Expects(x >= 0) должен быть частью интерфейса sqrt(), но это нелегко сделать. Пока мы помещаем его в определение (тело функции).
Ссылки: Expects() описан в GSL.
Примечание
Предпочитайте формальную спецификацию требований, такую как Expects(p);. Если это невозможно, используйте текст на естественном языке в комментариях, например, // последовательность [p:q) упорядочена с помощью <.
Примечание
Большинство функций-членов имеют в качестве предусловия соблюдение некоторого инварианта класса. Этот инвариант устанавливается конструктором и должен быть восстановлен при выходе каждой функцией-членом, вызываемой извне класса. Нам не нужно упоминать это для каждой функции-члена.
Контроль
(Не применяется)
Смотрите также: Правила передачи указателей. ???