offsetof
提供: cppreference.com
ヘッダ <cstddef> で定義
|
||
#define offsetof(type, member) /*implementation-defined*/ |
||
マクロ offsetof は、指定された型のオブジェクトの先頭から指定されたメンバまでの、パディング (もしあれば) を含むバイト単位のオフセットを値に持つ、 std::size_t 型の整数定数式に展開されます。
type
が標準レイアウト型でない場合、動作は未定義です (C++17未満) offsetof
マクロの使用は条件付きでサポートされます (C++17以上)。
member
が静的メンバまたはメンバ関数の場合、動作は未定義です。
標準レイアウト型の最初のメンバのオフセットは必ずゼロです (空の基底の最適化は必須です)。
式 offsetof(type, member)
は型依存になることはなく、 type が依存の場合にのみ値依存になります。
目次 |
[編集] 例外
offsetof
は例外を投げません。 式 noexcept(offsetof(type, member)) は必ず true に評価されます。
[編集] ノート
offsetof
は標準 C++ で実装することはできず、コンパイラサポートが必要です (GCC, LLVM)。
[編集] 例
Run this code
#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 演算子によって返される符号なし整数型 (typedef) | |
(C++11) |
型が標準レイアウト型かどうか調べます (クラステンプレート) |
offsetof の C言語リファレンス
|