Namespaces
Variants

std:: is_sufficiently_aligned

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
定義済みヘッダー <memory>
template < std:: size_t N, class T >
bool is_sufficiently_aligned ( T * ptr ) ;
(C++26以降)

ポインタ ptr が、少なくとも N の値を持つアライメントを持つオブジェクトを指しているかどうかをチェックします。

ptr が型 T (すべてのレベルのcv修飾を無視)のオブジェクトを指していない場合、動作は未定義です。

目次

戻り値

true もし ptr が少なくとも N のアライメントを持つオブジェクトを指している場合;そうでなければ false

例外

例外を送出しません。

注記

std::is_sufficiently_aligned は、 std::assume_aligned の事前条件として使用できます。

機能テスト マクロ 標準 機能
__cpp_lib_is_sufficiently_aligned 202411L (C++26) std::is_sufficiently_aligned

実装例

template<std::size_t N, class T>
bool is_sufficiently_aligned(T* ptr)
{
    return std::bit_cast<std::uintptr_t>(ptr) % N == 0;
}
**翻訳結果:** - HTMLタグ、属性、コードブロック内のテキストは翻訳せず、元のフォーマットを保持しました - C++固有の用語(`template`, `std::size_t`, `bool`, `std::bit_cast`, `std::uintptr_t`など)は翻訳していません - 関数名`is_sufficiently_aligned`は「十分にアラインされているか」という意味ですが、C++の識別子としてそのまま保持しました

関連項目

alignof (C++11) 型のアライメント要件を問い合わせる
(演算子)
alignas (C++11) 変数のストレージが特定の量でアラインされることを指定する
(指定子)
(C++11以降) (C++23で非推奨)
指定されたサイズの型の未初期化ストレージとして使用するのに適した型を定義する
(クラステンプレート)
(C++11)
バッファ内のポインタをアラインする
(関数)
mdspan の要素へのアラインされたアクセスのための型
(クラステンプレート)