как работает reinterpret_cast

548
07 февраля 2017, 20:52

Есть фрагмент кода. Почему в нем используется reinterpret_cast и как именно он работает? Почему тут не использовали static_cast?

ifstream is3("File3.txt", ios::binary);
if (is3)
{
    int value = 87;
    is3.read(reinterpret_cast<char*>(&value), sizeof(value));
    is3.close();
}
Answer 1

static_cast можно использовать для преобразования указателя типа void * в указатель типа T * или из указателя типа T * в указатель типа void *. reinterpret_cast предназначен для преобразования указателя из одного типа в другой тип, когда оба указателя не являются указателями типа void *

Из стандарта C++ (5.2.10 Reinterpret cast)

7 An object pointer can be explicitly converted to an object pointer of a different type.71 When a prvalue v of object pointer type is converted to the object pointer type “pointer to cv T”, the result is static_cast(static_cast(v)). Converting a prvalue of type “pointer to T1” to the type “pointer to T2” (where T1 and T2 are object types and where the alignment requirements of T2 are no stricter than those of T1) and back to its original type yields the original pointer value.

Для примера фрагмента кода из вашего вопроса это выглядело бы так с применением static_cast:

is3.read(static_cast<char*>(static_cast<void *>(&value)), sizeof(value));
READ ALSO
Конфликт в определении типа данных

Конфликт в определении типа данных

Есть два h-файла, в которых определен тип данных:

619
Перечисление полей структуры

Перечисление полей структуры

Есть структура и функции:

531
Разный статус заказа в один момент времени для разных пользователей

Разный статус заказа в один момент времени для разных пользователей

Коллеги, задумался над такой проблемой: как сделать разный статус заказа в один момент времени для разных пользователей?

515
Среднее значение из таблицы sql

Среднее значение из таблицы sql

Есть задача сформировать базу для личных целейИсходные данные более 2000 заданий 5 работников 2 вида оценок:

617