Namespaces
Variants
Views
Actions

offsetof

From cppreference.com
< cpp‎ | types
Revision as of 23:36, 31 May 2013 by P12bot (Talk | contribs)

 
 
 
Type support
Basic types
Fundamental types
Fixed width integer types (C++11)
(C++11)
offsetof
Numeric limits
C numeric limits interface
Runtime type information
Type traits
Primary type categories
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
Type properties
(C++11)
(C++11)
(C++11)
(C++14)
Supported operations
Relationships and property queries
(C++11)
(C++11)
(C++11)
(C++11)
Type modifications
(C++11)(C++11)(C++11)
Type transformations
(C++11)
(C++11)
(C++11)
Type trait constants
 
Defined in header <cstddef>
#define offsetof(type, member) /*implementation-defined*/

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.

Contents

Notes

If type is not a standard-layout type, the behavior is undefined.

If member is a static member or a function member, the behavior is undefined.

The offset of the first member of a standard-layout type is always zero (empty-base optimization is mandatory)

Possible implementation

#define offsetof(type,member) ((std::size_t) &(((type*)0)->member))

Example

#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';
}

Output:

the first element is at offset 0
the double is at offset 8

See also

unsigned integer type returned by the sizeof operator
(typedef) [edit]
checks if a type is standard-layout type
(class template) [edit]