Что такое контракты (как предложено для C ++ 17)?

Я читал о контрактах в Мысли о 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.

35
задан einpoklum 20 July 2019 в 22:52
поделиться