Philosophy
P.4
В идеале программа должна быть статически типобезопасной
Причина
В идеале программа была бы полностью статически (на этапе компиляции) типобезопасной. К сожалению, это невозможно. Проблемные области:
- объединения (union)
- приведения типов (cast)
- деградация массивов (array decay)
- ошибки диапазона
- сужающие преобразования
Примечание
Эти области являются источниками серьёзных проблем (например, сбоев и нарушений безопасности). Мы стараемся предоставлять альтернативные техники.
Контроль
Мы можем запретить, ограничить или обнаруживать отдельные категории проблем по отдельности, по мере необходимости и в зависимости от возможностей для конкретных программ. Всегда предлагайте альтернативу. Например:
- union — используйте
variant(в C++17) - приведения — минимизируйте их использование; шаблоны могут помочь
- деградация массивов — используйте
span(из GSL) - ошибки диапазона — используйте
span - сужающие преобразования — минимизируйте их использование и используйте
narrowилиnarrow_cast(из GSL) там, где они необходимы