# 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