# 13 лекция/Консультация C/C++ ## Плюсовые касты ```c (int)3.5 == 3; //true ``` Специальные типы для каста `int` в указатель: * `intptr_t` * `uintptr_t` Можно кастовать указатель int в указатель на double В си++ нельзя указатель на void неявно скастовать на другие типы указателей В си++ можно писать `int(3.5)` для однословных типов Кроме сишного в ++ есть ещё 3(4) каста (сишный разрезанный на 3 куска): 1) const_cast - может снимать или добавлять const и volatile, бесплатный, не изменяет степень доступа (нельзя записать в переменную const что либо через этот каст) 2) static_cast - преобразование типов 3) reinterpret_cast - сохраняет биты, бесплатный, про преобразование между указателей и между целыми типами и указателями, умеет кастовать указатели на функции ```cpp const int *p; int *q = const_cast<int *>(p); //может снимать или добавлять const и volatile ``` 4й си++ каст - `dynamic_cast`, про касты между наследниками и родителями, тяжелый (полнаценная функция), может закончиться неудачей (вернет `nullptr`, если ссылка - иключение), работает через RTTI