これでC++にstd :: align_val_tパラメータを持つ新しい演算子と削除演算子が追加されました。有効な値は何ですか?C++アロケータのstd :: align_val_tの有効なアライメント値は何ですか?
1,2,4,8、...などですか?
値の上限はありますか?
コンパイラによって定義されていますか?
これでC++にstd :: align_val_tパラメータを持つ新しい演算子と削除演算子が追加されました。有効な値は何ですか?C++アロケータのstd :: align_val_tの有効なアライメント値は何ですか?
1,2,4,8、...などですか?
値の上限はありますか?
コンパイラによって定義されていますか?
std::align_val_t
であり、制約は言語サポートヘッダー<new>
の概要で指定されています。 1は[new.delete]を読み込むのであれば、それは、次の言葉:特に指定のある場合を除き
、 の規定は、[basic.stc.dynamic] new演算子と delete演算子のライブラリのバージョンに適用されます。 これらの関数の に渡された整列引数の値が有効な整列値ではない場合、その動作は 未定義です。
だからあなたは、有効なアライメントの定義が[basic.align]/4で与えられている有効な値を渡す必要があります。
アラインメントは、型のstd :: size_t型の値として表現されています。有効な アラインメントには、基本タイプの式 のalignofで返された値と、追加の実装定義の 値のセット(空の場合がある)のみが含まれます。すべてのアラインメント値は、 の非負積分2乗でなければなりません。
したがって、実装で明示的に許可されている2の累乗と任意の値の累乗だけです。そして上記のstd::size_t
の言及について心配しないでください。
enum class align_val_t : size_t {};
これはまた、あなたが本質的std::numeric_limits<std::size_t>::max()
、について尋ねられた上限を意味しますstd::align_val_t
は、単に基本的なタイプとしてstd::size_t
持つ列挙型クラスです。もちろん、あなたの実装はより低いものを強制するかもしれません。
ありがとうございます。それが行く限りそれは良いです。私の質問の他の部分に答えることができますか?サポートされているアライメントの上限値は何ですか? – LincolnMan
@LincolnMan - 唯一のバウンドは 'std :: numeric_limits
[alingas](http://en.cppreference.com/w/cpp/language/alignas)の値と同じ値になると思います。 – StoryTeller
@StoryTeller C++標準のセクションはありますか彼らはalignasと同一でなければならないと言いますか?あなたはそれらが同じであると期待しているのですか? – LincolnMan
まあ、同様の目的です。 – StoryTeller