Мовні особливості:
Шаблони та загальний код
Лямбда
Атрибути
Очищення синтаксису
Очисник з багатоповерховим регулюванням та регулюванням потоку
Різне
Шістнадцяткові літери з поплавковою точкою
Динамічний розподіл пам’яті для завищених даних
Гарантована копія elision
- Нарешті!
- Не у всіх випадках, але відрізняє синтаксис, коли ви "просто створюєте щось", що називалося elision, від "справжнього elision".
Фіксований порядок оцінки для (деяких) виразів з деякими модифікаціями
- Не включаючи аргументи функції, але перемежування оцінок аргументів тепер заборонено
- Змушує купу роботи зламаного коду в основному працювати і
.then
надалі працювати.
Прямий список-ініціалізація перерахунків
Гарантії прогресу вперед (FPG) (також FPG для паралельних алгоритмів )
- Я думаю, що це говорить "реалізація може не затримувати нитки назавжди"?
u8'U', u8'T', u8'F', u8'8'
літерали символів (рядок уже існує)
"noexcept" у системі типів
__has_include
- Перевірте, чи містить файл заголовка помилку
- робить перехід від експериментального до std майже безпроблемним
Масиви виправлень конверсії вказівника
успадковані конструктори виправляються в деяких кутових випадках (див. приклади змін поведінки в P0136R0 )
сукупна ініціалізація з успадкуванням .
std::launder
, тип покарання тощо
Бібліотечні доповнення:
Типи даних
Викликати речі
std::invoke
- Зателефонуйте до будь-якого виклику (покажчик функції, функція, вказівник члена) одним синтаксисом. Від стандартної концепції INVOKE.
std::apply
- Бере функціональний і кортеж і розпаковує кортеж у дзвінок.
std::make_from_tuple
, std::apply
застосовується для будівництва об'єктів
is_invocable
, is_invocable_r
,invoke_result
Нитки
Поліпшення контейнера
Розумний вказівник змінюється
Інші std
вдосконалення типу даних:
Різне
Бібліотека C ++ 17 базується на C11 замість C99
Зарезервовано std[0-9]+
для майбутніх стандартних бібліотек
destroy(_at|_n)
, uninitialized_move(_n)
, uninitialized_value_construct(_n)
,uninitialized_default_construct(_n)
- код утиліти вже в більшості
std
реалізованих реалізацій
- Спеціальні математичні функції
- вчені можуть їм сподобатися
std::clamp()
std::clamp( a, b, c ) == std::max( b, std::min( a, c ) )
приблизно
gcd
і lcm
std::uncaught_exceptions
- Обов’язково, якщо ви хочете кидати лише в безпеці від деструкторів
std::as_const
std::bool_constant
- Ціла купа
_v
змінних шаблонів
std::void_t<T>
- Дивно корисно при написанні шаблонів
std::owner_less<void>
- як
std::less<void>
, але для розумних покажчиків сортувати за вмістом
std::chrono
шліфувати
std::conjunction
, std::disjunction
,std::negation
Піддаються
std::not_fn
- Правила для noexcept всередині
std
- std :: is_contiguous_layout , корисний для ефективного хешування
- std :: to_chars / std :: from_chars , висока продуктивність, перетворення агностичних номерів локалі; нарешті спосіб серіалізувати / десеріалізувати до читаних людьми форматів (JSON & co)
std :: default_order , непрямий перехід std::less
. ( перериває ABI деяких компіляторів через керування іменами, видалено.)
Риси
Застарілий
Isocpp.org має незалежний перелік змін після C ++ 14; воно частково розграбовано.
Природно, робота з ТС триває паралельно, тому є деякі ТС, не зовсім стиглі, яким доведеться чекати наступної ітерації. Мета наступної ітерації - C ++ 20, як було заплановано раніше, а не C ++ 19, як випливало з деяких чуток. C ++ 1O уникнуто.
Початковий список, взятий із цієї публікації reddit і цієї публікації reddit , із посиланнями, доданими через googling або із зазначеної вище сторінки isocpp.org.
Додаткові записи розроблені зі списку тестів SD-6 .
Список функцій дзвону в і бібліотеці список функцій знаходяться поруч розкрадатимуться. Це не здається надійним, оскільки це C ++ 1z, а не C ++ 17.
ці слайди мали деякі функції, відсутні в інших місцях.
У той час як "те, що було видалено" не запитували, ось короткий список кількох речей ((переважно?) Попереднього застарілого), які видаляються в C ++ 17 з C ++:
Видалено:
Були перемовки. Я не впевнений, чи вони впливають на код, чи вони просто очищають стандарт:
Документи, які ще не вбудовані у вище:
P0505R0 (constexpr chrono)
P0418R2 (атомні налаштування)
P0512R0 ( виправлення аргументів шаблону)
P0490R0 (структуровані зв'язки)
P0513R0 (зміни до std::hash
)
P0502R0 (паралельні винятки)
P0509R1 (оновлення обмежень на обробку виключень)
P0012R1 (зробити специфікації виключення частиною системи типу)
P0510R0 (обмеження на варіанти)
P0504R0 (теги на вибір (варіант) / будь-який)
P0497R0 (спільне налаштування ptr)
P0508R0 (структуровані ручки прив'язки вузлів)
P0521R0 (кількість використаних покажчиків та унікальні зміни?)
Спеціальні зміни:
Подальша довідка: