C ++ 20: Что готово прибыть в язык C ++?

С комитет стандартов поместил себе как цель принимать новый стандарт каждые 3 года. Так он был до даты и у нас были следующие стандарты:

Стандартизация разделяется на четыре рабочие группы:

  • Основа (Core): Содержание языка и стандартизация новых предложений.
  • Эволюция: Разработка новых характеристик для языка.
  • Книжный магазин: Содержание стандартного книжного магазина и стандартизация новых предложений.
  • Эволюция книжного магазина: Разработка новых характеристик для стандартного книжного магазина.

В июле 2019 это считался стандартом C ++ такой 20 как ограда. Это подразумевает, что ему не могут добавляться новые характеристики (хотя да было бы возможно удалять какую-то, если бы были обнаружены проблемы), и одобренные характеристики проверены для возможного прогресса или меньших исправлений.

В вышеупомянутой встрече, считалось, что предложение Contratos2 (технический документ P0542R4) не было бы присоединено в C ++ 20, и запаздывает в C ++ 23.

Мы будем заносить в список какие-то из главных характеристик, которые присоединит C ++ 20.



1Debido в какую-то странную ошибку, я написал, что я касаюсь два трэда C ++ 17.

2Según Wikipedia контракт:

Рисунок из-за контракта - методология для рисунка и осуществления приложений и компонентов, популяризируемого языком программирования Эйфель. Состой в считении элементов рисунка как участники связи, сходной по деловому контракту. Так, могут быть разработанными компоненты понимая, что будут выполнены некие условия ввода (предварительные условия), в то время как должны будут быть гарантированными некие условия вывода (пост-условия), также как и невариант класса (свойства, которые поддерживают неварианты несмотря на обработку, осуществленную компонентом).

Контракты C ++ продолжат синтаксис признаков (добавленные в C ++ 11):

[[contrato modificador: expresión-condicional]]

Контракты были двинуты в C ++ 23, выставленное далее подвержено изменениям: Доступные контракты:

  • expects: Контракт типа expects это предварительное условие. Покажи то, что функция ждет от Ваших аргументов и ждут, что вышеупомянутый контракт поддержал в течение всего вызова функцию.
  • ensures: Контракт типа ensures это пост-условие. Покажи состояние, которое ожидается, что у них были объекты, перешедшие в функцию (или возврат той же самой), закончив вызов.
  • asert: Контракт типа assert это утверждение. Показывает условие, которое ожидается, что она была удовлетворена в месте, в котором появляется контракт.

Когда контракт не будет выполнен, будет сделан призыв к функции со следующей подписью:

void(const std::contract_violation &);

Объект std::contract_violation он будет содержать информацию о неисполнении договора, как где (файл, линия, функция) он не был выполнен.

Могут применяться модификаторы по контрактам, модификаторы коснутся того, как производится код с контрактами, и если контракты проверят или нет во время выполнения. Доступные модификаторы:

  • axiom: Ждут, что у проверки условий этого контракта не было цены, не оцениваются во время выполнения.
  • default: Ждут, что проверка условий этого контракта была мало дорогой.
  • audit: Ждут, что проверка условий этого контракта была дорогой.

Контракты, которые будут проверены во времени компиляции, содержат код, который будет составлен, возможно определять уровень, с которым хочется составлять каждую единицу перевода и вытекающее поведение, он будет:

  • По умолчанию: Проверь (составь) явные контракты как default (контракты, у которых не есть модификатора, считаются default).
  • Ревизия: Проверь (составь) явные контракты как audit и default.
25
задан 21.10.2019, 12:43
0 ответов