名前空間
変種
操作

alignas 指定子 (C++11以上)

提供: cppreference.com
< cpp‎ | language
 
 
C++言語
一般的なトピック
フロー制御
条件付き実行文
繰り返し文 (ループ)
ジャンプ文
関数
関数宣言
ラムダ関数宣言
inline 指定子
例外指定(C++20未満)
noexcept 指定子(C++11)
例外
名前空間
指定子
decltype(C++11)
auto(C++11)
alignas(C++11)
記憶域期間指定子
初期化
代替表現
リテラル
ブーリアン - 整数 - 浮動小数点
文字 - 文字列 - nullptr(C++11)
ユーザ定義(C++11)
ユーティリティ
属性(C++11)
typedef 宣言
型エイリアス宣言(C++11)
キャスト
暗黙の変換 - 明示的な変換
static_cast - dynamic_cast
const_cast - reinterpret_cast
メモリ確保
クラス
クラス固有の関数特性
特別なメンバ関数
テンプレート
その他
 
 

型またはオブジェクトのアライメント要件を指定します。

目次

[編集]構文

alignas(expression)
alignas(type-id)
alignas(pack...)
1)expression は、ゼロに、またはアライメントまたは拡張アライメントに対する有効な値に評価される、整数定数式でなければなりません。
2)alignas(alignof(type)) と同等です。
3) 同じ宣言に適用される複数の alignas 指定子 (パラメータパック (型または非型のいずれでも構いません) のそれぞれのメンバにつきひとつずつ) と同等です。

[編集]説明

alignas 指定子は、変数またはビットフィールドでないクラスデータメンバの宣言、またはクラス/構造体/共用体または列挙の宣言または定義に適用できます。 関数の引数や catch 節の例外引数には適用できません。

そのような宣言によって宣言されたオブジェクトまたは型は、その宣言で使用されたすべての alignas 指定子の最も厳しい (大きい) ゼロでない expression と等しいアライメント要件を持ちます。 ただし、それがその型の自然なアライメントを弱める場合は除きます。

ある宣言における最も厳しい (大きい) alignas が、もしいかなる alignas 指定子もなかったならば持つであろうはずだったアライメントよりも弱い (つまり、その自然なアライメントよりも弱いか、同じオブジェクトまたは型の別の宣言における alignas よりも弱い) 場合、プログラムは ill-formed です。

struct alignas(8) S {};struct alignas(1) U { S s;};// エラー、 U のアライメントは alignas(1) がなければ 8 のはずです。

alignas(3) のような無効な非ゼロの引数は ill-formed です。

同じ宣言における別の alignas よりも弱い有効な非ゼロのアライメントは無視されます。

alignas(0) は常に無視されます。

[編集]ノート

ISO C11 標準以降、 C 言語では _Alignas キーワードが使用でき、このキーワードに展開されるプリプロセッサマクロとしてヘッダ <stdalign.h>alignas が定義されていますが、 C++ では alignas はキーワードであり、ヘッダ <stdalign.h> および <cstdalign> でそのようなマクロは定義されません。 しかしマクロ定数 __alignas_is_defined はこれらのヘッダで定義されます。

[編集]キーワード

alignas

[編集]

// sse_t 型のすべてのオブジェクトは16バイト境界にアラインされます。struct alignas(16) sse_t {float sse_data[4];};   // 配列「cacheline」は128バイト境界にアラインされます。 alignas(128)char cacheline[128];     int main(){}


[編集]関連項目

alignof 演算子(C++11) 型のアライメント要件を問い合わせます[edit]
型のアライメント要件を取得します
(クラステンプレート)[edit]
close