TGViewer
Сіпласпластик Сіпласпластик @cpplastic · 739 subscribers
Post #500 862
Там позавчора нарешті затвердили новий стандарт C++26, тож усіх вітаю. Тепер звісно доведеться почекати ще років 3–5–7, доки його імплементують у компіляторах, і все ж.

Саттер каже, мовляв, це найпотужніший стандарт з часів C++11, тож дивитимуся потихеньку, що там цікавого додали. Сьогодні про одну з таких фічей мова.

Мені завжди подобалося, як в 💻 (точніше SPARK) можна описувати перед- та постумови для функцій (приклад поцупив звідси):
procedure Set_Speed (S : in out Speed_Knots; New_Value : Speed_Knots)
with
Pre => New_Value >= 0.0 and New_Value <= 1000.0,
Post => S = New_Value;


Віднині в 💻 теж можна буде так робити! Має бути щось на кшталт отакого:
void set_speed(speed_knots & s, speed_knots new_value)
pre(new_value >= 0.0 && new_value <= 1000.0)
post(s == new_value);


Ну або уявімо, що треба перевірити значення, яке повертається, то буде щось отаке:
auto calculate(auto && val) post(r: is_valid(r));


Таким чином кількість того, що в C++ можна писати між блоком параметрів функції та її тілом, небезпечно наближається до Ada 🙂

Фіча зветься контрактами, якщо шо, і там окрім pre та post ще додали так званий contract_assert. На вигляд наче звичайний assert, як і був, тільки тепер не сішний макрос, а прям інструкція самої мови. Можна користуватися всередині функцій, щоб додати обрисів очікуванням від коду.

Отже, загалом корисно на вигляд. Хоча спершу варто почитати правила, за якими ця фіча взаємодіє з іншими 😉 На закуску тримайте приклад, як це виглядає в трохи реальнішому коді. Тут вам і концепти, і контракти, і constexpr, і trailing return type, і structured binding.
template <std::floating_point T>
constexpr auto normalize(std::array<T, 3> vector) noexcept -> std::array<T, 3>
pre(is_normalizable(vector))
post(vector: is_normalized(vector))
{
auto& [x, y, z]{vector};
const auto norm{std::hypot(x, y, z)};

x /= norm, y /= norm, z /= norm;

return vector;
}
  • 🔥 15
  • 👍 5
  • 💊 2
  • 😁 1
  • 😱 1
  • 🤪 1
More from @cpplastic
  1. Oct 7, 2026Post #543
  2. Oct 2, 2026Щось не злетіло з self-driving cars у автовиробників, еге ж? А стільки галасу було. Ну зат…
  3. Sep 24, 2026Ух, яку ж класну доповідь подивився: «Scott Jenson: Are we really going to use the same De…
  4. Sep 23, 2026Post #540
  5. Sep 21, 2026«Порекламую» вам український сайт, який мені дуже подобається. Взяв слово в лапки, бо як і…
  6. Sep 18, 2026Ви ж знаєте, що я полюбляю Tailscale 💠 попри те, що недоліків у них теж вистачає? Але сам…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →