offsetof
Материал из cppreference.com
|
|
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google.
Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке. Щёлкните здесь, чтобы увидеть английскую версию этой страницы |
| Определён в заголовочном файле <cstddef>
|
||
| #define offsetof(type, member) /*implementation-defined*/ |
||
offsetof макрос заменяется на константу типа std::size_t, значение которой является смещение в байтах от начала объекта заданного типа в своем указанного члена, в том числе обивка если таковые имеются.
Оригинал:
The macro offsetof expands to a constant of type std::size_t, the value of which is the offset, in bytes, from the beginning of an object of specified type to its specified member, including padding if any.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Содержание |
[править] Заметки
Если
type не является стандартной верстки типа, поведение не определено.Оригинал:
If
type is not a standard-layout type, the behavior is undefined.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Если
member является статическим членом или функции-члена, поведение не определено.Оригинал:
If
member is a static member or a function member, the behavior is undefined.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Смещение первого члена стандартной верстки типа всегда равна нулю (пустой базой оптимизации является обязательным)
Оригинал:
The offset of the first member of a standard-layout type is always zero (пустой базой оптимизации is mandatory)
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править] Возможная реализация
#define offsetof(type,member) ((std::size_t) &(((type*)0)->member)) |
[править] Пример
Запустить этот код
#include <iostream> #include <cstddef> struct S { char c; double d; }; int main() { std::cout << "the first element is at offset " << offsetof(S, c) << '\n' << "the double is at offset " << offsetof(S, d) << '\n'; }
Вывод:
the first element is at offset 0 the double is at offset 8
[править] См. также
| Тип беззнакового целого числа, возвращаемого оператором sizeof (определение типа) | |
| (C++11) |
Проверяет имеет ли класс стандартную компоновку или нет (шаблон класса) |

