Сергей Талантов - Опасность устарела, неопределенность недопустима: undefined behavior в С++20/23/26
ฝัง
- เผยแพร่เมื่อ 19 ธ.ค. 2024
- Ближайшая конференция - C++ Russia 2025, 20-21 марта, Москва + online. Подробности и билеты: jrg.su/9Sszhd
- -
Скачать презентацию с сайта C++ Russia - jrg.su/6yiJOe
В современных стандартах С++ стало меньше UB. Разбираем на конкретных кейсах.
- Начиная с С++20 отрицательные целые числа обязательно должны быть представлены в дополнительном коде. Это сокращает количество UB в битовых операциях и не только.
- Введение std::ssize, возвращающего знаковый размер контейнеров, уменьшает количество ошибок и UB в циклах.
- Расширение времени жизни временных объектов в циклах for, появившееся в С++23, решает неочевидные проблемы.
- Казалось бы, мелочь, но инициализация std::string нулевым указателем раньше была UB, a теперь запрещена.
- В С++23 появился эксклюзивный режим открытия файла (O_EXCL), что решает проблему гонок (time-of-check to time-of-use).
- Будет ли введена арифметика с насыщением в С++26?
Некоторые конструкции языка признаются небезопасными и устаревшими, также проходимся по ним:
- Осталось ли что-то от volatile?
- Можно ли теперь делать неявный захват this по значению в лямбдах?
- Какие операции с enum теперь не в почете.