Кресты на моей кукухе
117 subscribers
202 photos
2 videos
5 files
43 links
Канал имени @vatneek
Здесь вы увидите:
* шитпостинг
* С++
* раст (иногда, по праздникам, я не растовод, я только балуюсь)
* шитпостинг
Download Telegram
Терпеть это больше невозможно, мне надо где-то делиться всем счастьем, которое я встречаю в плюсах
(А также, в частности, в шланге)
В ast представлении шланга объявление класса выглядит как CXXRecordDecl нода
У неё есть дети-объявления (всякие using'и, методы и прочие friend'ы)
Первый деть-объявление — сама нода
Зачем? Затем
Channel name was changed to «Кресты на моей кукухе»
Когда-то очень давно хотел навалять пост про noexcept, потом он заглох, в итоге ничего сюда не писал

Обожаю этот ваш noexcept. Опустим мысль о том, что говорить в коде "эта функция, бля буду, не свалится с ошибкой" вместо "эта функция может свалиться вот с такой ошибкой" это само по себе восхитительно, сейчас о другом

Когда вводили эту фичу, видимо понимали, что никто никогда не вспомнит вовремя навесить noexcept, потому есть офигенские правила вывода, бросающая ли функция

~Всегда да, ну кроме случаев, когда
* есть noexcept(true)
* это деструктор, ну кроме случаев, когда
* * деструктор кого-то из баз или полей не бросает
* это задефолтившиеся конструкторы copy/move/default, ну кроме случаев, когда
* *
у кого-то из баз/полей этот конструктор бросает
* * задефолченный аргумент бросает при конструировании
дефолтно инициализирующиеся поля бросают
* это задефолтившиеся операторы присовения, нУ кРоМеСлУчАеВ, кОгДа
* * какой-нибудь вызов в них потенциально бросает

Сами компиляторы могут вывести, бросает ли ваша функция, если видят её полностью. И помните!
* noexcept, когда из вашей функции может что-то вылететь, провоцирует неявную вставку try-catch и`std::terminate`, если исключение всё же прилетит (я так делал вместо assert(false), чтобы в перф сборке уронить процесс, очень удобно)
* отсутствие noexcept сковывает оптимизации вашего кода (std::vector загрустит на resize, если ваши мув-конструкторы могут бросить)