Отчет по онлайн-встрече комитета C++ от Антона Полухина.
Было добавлено много улучшающих жизнь исправлений в C++20:
- constexpr-проверка строки формата в
std::format
и
std::format_to
;
- работа
std::ranges::split
/
join
и представлений не только для forward-итераторов (да, сплит по разделителям теперь в C++!!),
-
std::ranges::to
теперь поможет вам сохранить произвольный диапазон в заданный контейнер;
В C++23 добавили:
-
std::to_underlying
для преобразования значения перечисления к его нижележащему типу;
- новая функция
std::allocate_at_least(
аллокатор
,
размер
)
, возвращающая пару "указатель-размер" , где размер может быть больше запрошенного (полезно для некоторых аллокаторов, которые могут выделить чуть больше памяти, и для избежания переаллокаций);
-
std::spanstream
, позволяющий использовать любой непрерывный отрезок памяти без выделения памяти и владения, и работать с ним, как с обычным io-потоком;
- новый if -
if consteval
- позволяющий узнать, идёт ли выполнение на стадии consteval-выполнения;
- убрали поддержку GC, ибо ей в том виде не пользовались, и добавлялось просто UB;
- Добавили вспомогательные классы
std::out_ptr
и
std::inout_ptr
, позволяющие работать с C API, и с пользовательскими умными указателями, автоматически управляя жизнью ресурса, поддерживая RAII;
- Оператор сравнения для
type_info
теперь constexpr, приближая нас к "Compile Time Type Info";
- новые алгоритмы
std::starts_with
и
std::ends_with
, без привязки к
std::string
и
std::string_view
;
- больше constexpr для
std::optional
и
std::variant
в куче мест, благодаря возможностям C++20 по constexpr-аллокациям;
- запрет конструирования
std::string
и
std::string_view
от
nullptr
.
Больше деталей – в новой статье Антона:
https://habr.com/ru/company/yandex/blog/561104/#cpp #cpp23 #online_report #isocpp #easy_string_split_in_2021