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)
Défini dans l'en-tête <memory>
template < std:: size_t N, class T >
bool is_sufficiently_aligned ( T * ptr ) ;
(depuis C++26)

Vérifie si le pointeur ptr pointe vers un objet dont l'alignement a une valeur d'au moins N .

Le comportement est indéfini si ptr ne pointe pas vers un objet de type T (en ignorant les qualifications cv à chaque niveau).

Table des matières

Valeur de retour

true si ptr pointe vers un objet ayant un alignement d'au moins N ; sinon false .

Exceptions

Ne lance rien.

Notes

std::is_sufficiently_aligned peut être utilisé comme précondition pour std::assume_aligned .

Macro de test de fonctionnalité Valeur Norme Fonctionnalité
__cpp_lib_is_sufficiently_aligned 202411L (C++26) std::is_sufficiently_aligned

Implémentation possible

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

Exemple

Voir aussi

alignof (C++11) interroge les exigences d'alignement d'un type
(opérateur)
alignas (C++11) spécifie que le stockage de la variable doit être aligné sur une valeur spécifique
(spécificateur)
(depuis C++11) (obsolète en C++23)
définit le type approprié pour une utilisation comme stockage non initialisé pour des types de taille donnée
(modèle de classe)
(C++11)
aligne un pointeur dans un tampon
(fonction)
un type pour l'accès aligné aux éléments de mdspan
(modèle de classe)