Тип доклада: Доклад

Опасность устарела, неопределенность недопустима: исследуем изменения в undefined behavior в С++20/23/26

  • Доклад на русском языке

В современных стандартах С++ стало меньше 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 теперь не в почете.

Спикеры

Приглашенные эксперты

Расписание