offsetof
cppreference.com
<tbody>
</tbody>
#define offsetof(type, member) /* */ |
||
offsetof std::size_t, , , .
o type , o.member lvalue, o. . , member , -, .
type PODType ( C++11) ( C++11), offsetof ( C++17) offsetof ( C++17).
offsetof(type, member) , type .
offsetof .
|
|
( C++11) |
| ( C++11) |
member . , . C DR 496.
C23 , offsetof , C++: offsetof(struct Foo { int a; }, a) ICC GCC, offsetof(struct Foo { int a, b; }, a) - Foo.
#include <cstddef>
#include <iostream>
struct S
{
char m0;
double m1;
short m2;
char m3;
// private: int z; // : 'S'
};
int main()
{
std::cout
<< " char m0 = " << offsetof(S, m0) << '\n'
<< " double m1 = " << offsetof(S, m1) << '\n'
<< " short m2 = " << offsetof(S, m2) << '\n'
<< " char m3 = " << offsetof(S, m3) << '\n';
}
:
char m0 = 0
double m1 = 8
short m2 = 16
char m3 = 18
C++:
| CWG 273 | C++98 | offsetof , operator&
|
, operator&
|
| LWG 306 | C++98 | , type PODType
|
|
| LWG 449 | C++98 | offsetof LWG 306 |
| , sizeof ( ) | |
(C++11) |
, ( ) |
C offsetof
| |