Можно ли предположить, что смещение элемента данных (offsetof(mystruct, myfield)
) численно равно необработанному значению указателя-члена, полученного с помощью &mystruct::myfield
, или это зависит от реализации?является указателем на элемент данных его смещения?
1
A
ответ
3
Нет; реализация указателя на член не указывается, и нет определенного преобразования для получения «необработанного» значения.
0
Формально это зависит от реализации, конечно. В реальной жизни да, самая популярная реализация указателей-указателей-данных - это (или основана на) планомерное смещение, т. Е. То же самое, что оценивается offsetof
.
Некоторые реализации используют точное смещение, прибегая к шаблону 0xFFF...
для представления значения нулевого указателя. В некоторых реализациях резервируется шаблон 0x000...
для значения нулевого указателя, а приращение всех «ненулевых» смещений - 1
.
Нет, это не следует предполагать так. Вы забываете о накладных расходах (памяти), которые компилятор может вставить для управления выделенной таким образом памятью. – DumbCoder
Лучший вопрос: если вы знаете две формы, почему бы вам не использовать указатель на член? :) –
Я действительно планирую использовать указатель на членов, так как моя программа выполняет некоторые трюки низкого уровня со смещением, и я хочу «поднять» их до более стандартной формы. –