Программирование. Принципы и практика использования C++ Исправленное издание, стр. 231
В таких случаях нам нужны две вещи.
• Тип указателя, ссылающегося на память без учета информации о том, какие объекты в нем размещены.
• Операция, сообщающая компилятору, какой тип данных подразумевается (без проверки) при ссылке на ячейку памяти с помощью такого указателя.
void*newОбъектов типа
voidvoidvoid v; // ошибка: объектов типа void не существуетvoid f(); // функция f() ничего не возвращает; // это не значит, что функция f() возвращает объект // типа voidУказателю типа
void*void* pv1 = new int; // OK: int* превращается в void*void* pv2 = new double[10]; // OK: double* превращается в void*Поскольку компилятор ничего не знает о том, на что ссылается указатель типа
void*void f(void* pv){ void* pv2 = pv; // правильно (тип void* для этого // и предназначен) double* pd = pv; // ошибка: невозможно привести тип void* // к double* *pv = 7; // ошибка: невозможно разыменовать void* // (тип объекта, на который ссылается указатель, // неизвестен) pv[2] = 9; // ошибка: void* нельзя индексировать int* pi = static_cast<int*>(pv); // OK: явное приведение // ...}
static_castvoid*double*static_caststatic_caststatic_cast• Оператор
reinterpret_castintdouble*• Оператор
const_castconstРассмотрим пример.
Register* in = reinterpret_cast<Register*>(0xff);void f(const Buffer* p){ Buffer* b = const_cast<Buffer*>(p); // ...}Первый пример — классическая ситуация, в которой необходимо применить оператор
reinterpret_cast0xFFRegister
Во втором примере оператор
const_castconstconst Buffer*pПо крайней мере, оператор
static_castconststatic_caststatic_castreinterpret_cast17.9. Указатели и ссылки
Ссылку (reference) можно интерпретировать как автоматически разыменовываемый постоянный указатель или альтернативное имя объекта. Указатели и ссылки отличаются следующими особенностями.
• Присвоение чего-либо указателю изменяет значение указателя, а не объекта, на который он установлен.
• Для того чтобы получить указатель, как правило, необходимо использовать оператор
new&• Для доступа к объекту, на который установлен указатель, используются операторы
*[]• Присвоение ссылке нового значения изменяет значение объекта, на который она ссылается, а не саму ссылку.