Не зовсім вірно, що "стверджувати не вдається лише в режимі налагодження".
У « Об’єктно-орієнтованій програмі побудови програмного забезпечення», 2-е видання Бертран Меєра, автор залишає відкриті двері для перевірки передумов у режимі випуску. У цьому випадку те, що відбувається, коли твердження провалюється, це те, що ... порушено виняток із порушення твердження! У цьому випадку відновлення з ситуації не відбувається: хоч щось корисне можна зробити, і це автоматично генерувати звіт про помилки та, в деяких випадках, перезавантажувати програму.
Мотивація цього полягає в тому, що передумови, як правило, дешевші для тестування, ніж інваріанти та пост-умови, і що в деяких випадках правильність та "безпека" у складанні випуску важливіші за швидкість. тобто для багатьох програм швидкість не є проблемою, а надійністю (здатність програми поводитись безпечно, коли її поведінка не є правильною, тобто коли договір порушується).
Чи слід завжди залишати перевірені передумови включеними? Це залежить. Тобі вирішувати. Універсальної відповіді немає. Якщо ви створюєте програмне забезпечення для банку, може бути краще перервати виконання тривожним повідомленням, ніж переказувати 1 000 000 доларів замість 1000 доларів. Але що робити, якщо ви програмуєте гру? Можливо, вам потрібна вся швидкість, яку ви можете отримати, і якщо хтось отримає 1000 балів замість 10 через помилку, яку попередні умови не вловили (бо вони не ввімкнуті), велика удача.
В обох випадках в ідеалі ви повинні підхопити цю помилку під час тестування, і ви повинні виконати значну частину свого тестування з включеними твердженнями. Тут йдеться про те, яка найкраща політика для тих рідкісних випадків, коли передумови не відповідають виробничому коду за сценарієм, який раніше не був виявлений через неповне тестування.
Підводячи підсумок, ви можете мати твердження і все-таки отримувати винятки автоматично , якщо залишити їх увімкнутими - принаймні в Ейфелі. Я думаю, щоб зробити те ж саме в C ++, потрібно ввести його самостійно.
Дивіться також: Коли твердження повинні залишатися у виробничому коді?