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言語リファレンス |