offsetof
提供: cppreference.com
<tbody>
</tbody>
| ヘッダ <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言語リファレンス
| |