Сергей Талантов - Опасность устарела, неопределенность недопустима: 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 теперь не в почете.

ความคิดเห็น •