Как мы знаем, reinterpret_cast может привести любой нестандартный указатель к другому нестандартному указателю.
Почти, но не точно.Например, вы не можете использовать reinterpret_cast для приведения const int*
к int*
.Для этого вам нужно const_cast
.
Как работает reinterpret_cast, Что такое магия (внутренняя реализация), которая позволяет reinterpret_cast работать?
Там нет магиисовсем.В конечном итоге, все данные являются только байтами.Система типов C ++ - это просто уровень абстракции, который сообщает компилятору, как «интерпретировать» каждый байт.A reinterpret_cast
аналогичен обычному C-приведению в том смысле, что он просто говорит «к черту систему типов: интерпретируйте эти байты как тип X вместо типа Y!»
Как обеспечитьбезопасность при использовании reinterpret_cast?Насколько я знаю, это не гарантирует безопасного приведения, так какие меры предосторожности предпринять при использовании reinterpret_cast?
Ну, reinterpret_cast
по своей природе опасен.Вы не должны использовать его, если вы действительно не знаете, что делаете.Попробуйте использовать static_cast
вместо этого.Система типов C ++ защитит вас от выполнения чего-либо слишком опасного, если вы используете static_cast
.
Каково практическое использование этого оператора.Я действительно не сталкивался с этим в своем профессиональном опыте программирования, в котором я не мог обойтись без использования этого оператора. Любые практические примеры, кроме обычного int * to char *, будут очень полезны и оценены.
У него много применений, но обычно они несколько «продвинуты».Например, если вы создаете пул памяти связанных блоков и сохраняете указатели для освобождения блоков на самих блоках, вам потребуется reinterpret_cast
блок из T*
в T**
, чтобы интерпретировать блок какуказатель на следующий блок, а не на сам блок.