Namensräume
Varianten
Aktionen

std::is_sufficiently_aligned

Von cppreference.com
< cpp‎ | memory
 
 
Speicherverwaltungsbibliothek
(nur Exposition*)
Algorithmen für uninitialisierten Speicher
(C++17)
(C++17)
(C++17)
Beschränkte uninitialisierte
Speicher-Algorithmen
C-Bibliothek

Allocatoren
Speicherressourcen
Unterstützung für Garbage Collection
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
(C++11)(bis C++23)
Uninitialisierter Speicher
Explizites Lebenszeitmanagement
 
Definiert in Header <memory>
template< std::size_t N, class T >
bool is_sufficiently_aligned( T* ptr );
(seit C++26)

Prü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 der cv-Qualifizierung auf jeder Ebene).

Inhalt

[bearbeiten] Rückgabewert

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

[bearbeiten] Ausnahmen

Wirft nichts.

[bearbeiten] 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

[bearbeiten] 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;
}

[bearbeiten] Beispiel

[bearbeiten] Siehe auch

alignof (C++11) fragt nach Ausrichtungsanforderungen eines Typs
(Operator)[bearbeiten]
alignas (C++11) gibt an, dass der Speicher für die Variable um einen bestimmten Betrag ausgerichtet werden soll
(Spezifizierer)[bearbeiten]
(seit C++11)(veraltet in C++23)
definiert den Typ, der als uninitialisierter Speicher für Typen gegebener Größe geeignet ist
(Klassenvorlage) [bearbeiten]
(C++11)
richtet einen Zeiger in einem Puffer aus
(Funktion) [edit]
ein Typ für den ausgerichteten Zugriff auf Elemente von mdspan
(class template) [edit]