Я читал о контрактах в Мысли о C ++ 17 Б. Страуструпа и помогал в небольшой презентации, рассказывая о них, но я не уверен, что понял их на самом деле.
Итак, у меня есть некоторые допросы, и, если возможно, проиллюстрировать их некоторыми примерами:
Являются ли контракты просто лучшей заменой классического assert()
и должны ли они использоваться все вместе ? Какие контракты действительно выражаются в простых терминах для разработчика программного обеспечения?
Будут ли контракты влиять на то, как мы обрабатываем исключения? Если да, как мы должны использовать исключения и контракты?
Будет ли использование контрактов накладными расходами во время исполнения? Разрешим ли нам деактивировать их по коду выпуска?
Из предложения N4415 :
Контракт о предварительных условиях Оператор индексирования класса Vector может быть записан:
T& operator[](size_t i) [[expects: i < size()]];
Аналогично, контракт после условия для конструктора класса ArrayView можно выразить как:
ArrayView(const vector
& v) [[ensures: data() == v.data()]];
Благодаря комментарию @Keith Thompson:
Контракты не попали в C ++ 20 . Была создана новая исследовательская группа, SG21.