Это не вопрос производительности;это вопрос гибкости.
C assert
Это просто завершается (в отладочных сборках), если условие выполняется, и обычно ничего не делает в сборках релиза.
GSL контрактcheck
В зависимости от конфигурации это может:
- Бросить исключение
- Завершить
- Ничего не делать
- … кроме сигнала оптимизатору о том, что мы ожидаем, что условие будет выполнено (если поддерживается)
В некоторых режимах конфигурации, я полагаю, GSL's Expects
иEnsures
макросы в конечном итоге делают почти то же самое, что и assert
.Но не во всех.
Стоит отметить, однако, что поведение GSL, по-видимому, не зависит от конфигурации сборки (отладка против выпуска).Я предполагаю (и я только предполагаю), что для критичного к производительности кода разумный сопровождающий проекта выберет режим # 1 или # 2 в отладочных сборках и # 3 (или, возможно, # 2) в сборках релиза.