2012-01-30 1 views
1

Можно ли предположить, что смещение элемента данных (offsetof(mystruct, myfield)) численно равно необработанному значению указателя-члена, полученного с помощью &mystruct::myfield, или это зависит от реализации?является указателем на элемент данных его смещения?

+0

Нет, это не следует предполагать так. Вы забываете о накладных расходах (памяти), которые компилятор может вставить для управления выделенной таким образом памятью. – DumbCoder

+3

Лучший вопрос: если вы знаете две формы, почему бы вам не использовать указатель на член? :) –

+0

Я действительно планирую использовать указатель на членов, так как моя программа выполняет некоторые трюки низкого уровня со смещением, и я хочу «поднять» их до более стандартной формы. –

ответ

3

Нет; реализация указателя на член не указывается, и нет определенного преобразования для получения «необработанного» значения.

0

Формально это зависит от реализации, конечно. В реальной жизни да, самая популярная реализация указателей-указателей-данных - это (или основана на) планомерное смещение, т. Е. То же самое, что оценивается offsetof.

Некоторые реализации используют точное смещение, прибегая к шаблону 0xFFF... для представления значения нулевого указателя. В некоторых реализациях резервируется шаблон 0x000... для значения нулевого указателя, а приращение всех «ненулевых» смещений - 1.