Namespaces
Variants

std:: alignment_of

From cppreference.net
Metaprogramming library
Type traits
Type categories
(C++11)
(C++11) ( DR* )
Type properties
(C++11)
(C++11)
(C++14)
(C++11) (deprecated in C++26)
(C++11) ( until C++20* )
(C++11) (deprecated in C++20)
(C++11)
Type trait constants
Metafunctions
(C++17)
Supported operations
Relationships and property queries
(C++11)
alignment_of
(C++11)
(C++11)
(C++11)
Type modifications
Type transformations
(C++11) (deprecated in C++23)
(C++11) (deprecated in C++23)
(C++11)
(C++11) ( until C++20* ) (C++17)

Compile-time rational arithmetic
Compile-time integer sequences
定義先ヘッダ <type_traits>
template < class T >
struct alignment_of ;
(C++11以降)

メンバ定数 value を提供します。これは、 アライメント要件 T 型に対して alignof 式によって得られる値と等しくなります。 T が配列型の場合、要素型のアライメント要件を返します。 T が参照型の場合、参照先の型のアライメント要件を返します。

alignof ( T ) が有効な式でない場合、動作は未定義です。

プログラムが std::alignment_of または std::alignment_of_v (C++17以降) に対する特殊化を追加する場合、動作は未定義です。

目次

ヘルパー変数テンプレート

template < class T >
constexpr std:: size_t alignment_of_v = alignment_of < T > :: value ;
(C++17以降)

std:: integral_constant から継承

メンバ定数

value
[static]
alignof ( T )
(公開静的メンバ定数)

メンバ関数

operator std::size_t
オブジェクトを std:: size_t に変換し、 value を返す
(公開メンバ関数)
operator()
(C++14)
value を返す
(公開メンバ関数)

メンバ型

定義
value_type std:: size_t
type std:: integral_constant < std:: size_t , value >

実装例

template<class T>
struct alignment_of : std::integral_constant<std::size_t, alignof(T)> {};
(注:指定された条件により、HTMLタグ・属性、 タグ内のテキスト、C++固有の用語は翻訳せず、元のフォーマットを保持しています。翻訳対象となる自然言語テキストが存在しないため、出力は入力と同一となります)

注記

この型特性は alignof キーワードよりも前から存在しており、より簡潔に同じ値を取得するために使用できます。

#include <cstdint>
#include <iostream>
#include <type_traits>
struct A {};
struct B
{
    std::int8_t p;
    std::int16_t q;
};
int main()
{
    std::cout << std::alignment_of<A>::value << ' ';
    std::cout << std::alignment_of<B>::value << ' ';
    std::cout << std::alignment_of<int>() << ' '; // 代替構文
    std::cout << std::alignment_of_v<double> << '\n'; // C++17 代替構文
}

出力例:

1 2 4 8

関連項目

alignof (C++11) 型のアライメント要件を問い合わせる
(演算子)
alignas (C++11) 変数のストレージが特定の量でアライメントされることを指定する
(指定子)
(C++11以降) (C++23で非推奨)
指定されたサイズの型の未初期化ストレージとして使用するのに適した型を定義する
(クラステンプレート)
(C++11以降) (C++23で非推奨)
すべての指定された型の未初期化ストレージとして使用するのに適した型を定義する
(クラステンプレート)
他の任意のスカラ型と同じくらい大きなアライメント要件を持つトリビアル型
(typedef)