Try   HackMD

13 лекция/Консультация 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 - сохраняет биты, бесплатный, про преобразование между указателей и между целыми типами и указателями, умеет кастовать указатели на функции
const int *p;

int *q = const_cast<int *>(p); 
//может снимать или добавлять const и volatile

4й си++ каст - dynamic_cast, про касты между наследниками и родителями, тяжелый (полнаценная функция), может закончиться неудачей (вернет nullptr, если ссылка - иключение), работает через RTTI