Комітет ISO днями затвердив проєкт стандарту C++20. Основний стандарт мови виходить що три роки, тож ця версія є нащадком C++17. Протягом кількох місяців документ підготують остаточно, виправлять помилки й офіційно опублікують до кінця 2020 року.
Ось деякі нові нові функції стандарту C++20:
- Розширення для роботи з модулями. Сирцевий код у такому випадку компілюється один раз, а тоді повторно використовується як бінарний файл. Це зручніша альтернатива заголовковим файлам, модулі краще ізолюють код та пришвидшують компіляцію.
- Концепції. Це нові розширення шаблонів, які визначають перелік вимог до набору аргументів у шаблоні. Наприклад, якщо шаблон приймає аргумент типу (type argument), ми можемо уточнити, що цей аргумент (
T
) може бути ітератором (Iterator<T>
) або, наприклад, числом (Number<T>
). Це допомагає уникнути логічних помилок і загалом робить компіляцію зручнішою, зрештою, можна створювати власні концепції та відповідні бібліотеки концепцій. - Можливість лямбда-захоплення виразів [=, this].
- Підтримка корутин, функцій для тимчасової зупинки виконання, потрібних в асинхронному програмуванні.
- Підтримка оператора
<=>
, який виконує тристороннє порівняння і повертає «менше», «більше» або «дорівнює». - Можливість застосувати рядкові літерали у параметрах шаблонів.
- Підтримка нових атрибутів:
likely
,unlikely
іno_unique_address
.
З усім переліком функцій та оновлень стандартної бібліотеки можна ознайомитись тут.
Також в C++20 мали додати функцію контрактів, однак вона не була завершена, тож, вочевидь, з'явиться у наступній версії, C++23, яку вже почали готувати. За словами розробників, обидві версії стандарту вийдуть вчасно.
Ще немає коментарів