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)
Definiert in Header <memory>
template < std:: size_t N, class T >
bool is_sufficiently_aligned ( T * ptr ) ;
(seit C++26)

Überprüft, ob der Zeiger ptr auf ein Objekt zeigt, dessen Ausrichtung einen Wert von mindestens N hat.

Das Verhalten ist undefiniert, wenn ptr nicht auf ein Objekt vom Typ T zeigt (unter Ignorierung von CV-Qualifizierern auf jeder Ebene).

Inhaltsverzeichnis

Rückgabewert

true wenn ptr auf ein Objekt zeigt, das mindestens die Ausrichtung N hat; andernfalls false .

Ausnahmen

Wirft nichts.

Hinweise

std::is_sufficiently_aligned kann als Vorbedingung für std::assume_aligned verwendet werden.

Feature-Test Makro Wert Std Feature
__cpp_lib_is_sufficiently_aligned 202411L (C++26) std::is_sufficiently_aligned

Mögliche Implementierung

template<std::size_t N, class T>
bool is_sufficiently_aligned(T* ptr)
{
    return std::bit_cast<std::uintptr_t>(ptr) % N == 0;
}

Beispiel

Siehe auch

alignof (C++11) fragt die Ausrichtungsanforderungen eines Typs ab
(Operator)
alignas (C++11) spezifiziert, dass der Speicher für die Variable um einen bestimmten Betrag ausgerichtet sein soll
(Spezifizierer)
(seit C++11) (veraltet in C++23)
definiert den Typ, der als nicht initialisierter Speicher für Typen gegebener Größe geeignet ist
(Klassentemplate)
(C++11)
richtet einen Zeiger in einem Puffer aus
(Funktion)
ein Typ für ausgerichteten Zugriff auf Elemente von mdspan
(Klassentemplate)