alignof 演算子 (C++11 以降)
From cppreference.com
型のアラインメント要件を問い合わせます。
目次 |
[編集] 構文
alignof( type-id ) |
|||||||||
std::size_t 型の値を返します。
[編集] 説明
type-id によって示される型のインスタンスに必要なアラインメント (バイト単位) を返します。type-id は、完全なオブジェクト型、要素型が完全な配列型、またはこれらの型のいずれかへの参照型である必要があります。
型が参照型の場合、この演算子は参照される型のアラインメントを返します。型が配列型の場合、要素型のアラインメント要件が返されます。
[編集] 備考
alignof によって返される値の意味とプロパティについては、アラインメントを参照してください。
[編集] キーワード
[編集] 例
このコードを実行
#include <iostream> struct Foo { int i; float f; char c; }; // Note: alignas(alignof(long double)) below can be // simplified to alignas(long double) if desired. struct alignas(alignof(long double)) Foo2 { // put your definition here }; struct Empty {}; struct alignas(64) Empty64 {}; #define SHOW(expr) std::cout << #expr << " = " << (expr) << '\n' int main() { SHOW(alignof(char)); SHOW(alignof(int*)); SHOW(alignof(Foo)); SHOW(alignof(Foo2)); SHOW(alignof(Empty)); SHOW(alignof(Empty64)); }
実行結果の例
alignof(char) = 1 alignof(int*) = 8 alignof(Foo) = 4 alignof(Foo2) = 16 alignof(Empty) = 1 alignof(Empty64) = 64
[編集] 欠陥レポート
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| CWG 1305 | C++11 | type-id は、境界が不明で要素型が完全な配列への参照を表すことができませんでした 境界が不明で要素型が完全な配列への参照 |
許可 |
[編集] 参照
- C++23標準 (ISO/IEC 14882:2024)
- 7.6.2.6 Alignof [expr.alignof]
- C++20 standard (ISO/IEC 14882:2020)
- 7.6.2.5 Alignof [expr.alignof]
- C++17 standard (ISO/IEC 14882:2017)
- 8.3.6 Alignof [expr.alignof]
- C++14 standard (ISO/IEC 14882:2014)
- 5.3.6 Alignof [expr.alignof]
- C++11 standard (ISO/IEC 14882:2011)
- 5.3.6 Alignof [expr.alignof]
[編集] 関連項目
| アラインメント要件 | オブジェクトが割り当てられるアドレスを制限します。 |
alignas (C++11) |
変数用のストレージを特定の量でアラインすることを指定します。 (指定子) |
| (C++11) |
型のアライメント要件を取得する (クラステンプレート) |
| C ドキュメント
_Alignof, alignof 演算子 | |