История изменений
Исправление utf8nowhere, (текущая версия) :
У указателей есть значение. И это не адрес, а, скажем так, смысл указателя. Если был указатель на int, а его скастовали к указателю на float (через reinterpret_cast), то значение указателя не изменилось. Это по-прежнему указатель на int.
(значение указателя это не только указатель на объект какого-то типа)
(Вообще мне сложно сказать, какое значение у указателя, который возвращается malloc-ом.)
С помощью reinterpret_cast можно получать значения из указателя на тип T указатель на тип U, только если эти типы являются pointer-interconvertible, иначе значение указателя не изменяется. Получить указатель со значением «указатель на U» можно std::launder-ом. Естественно, при соблюдении соответствующих условий на отмываемый указатель.
Исходная версия utf8nowhere, :
У указателей есть значение. И это не адрес, а, скажем так, смысл указателя. Если был указатель на int, а его скастовали к указателю на float (через reinterpret_cast), то значение указателя не изменилось. Это по-прежнему указатель на int.
(значение указателя это не только указатель на какой-то тип)
(Вообще мне сложно сказать, какое значение у указателя, который возвращается malloc-ом.)
С помощью reinterpret_cast можно получать значения из указателя на тип T указатель на тип U, только если эти типы являются pointer-interconvertible, иначе значение указателя не изменяется. Получить указатель со значением «указатель на U» можно std::launder-ом. Естественно, при соблюдении соответствующих условий на отмываемый указатель.