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
Definiert im Header <type_traits>
template < class T >
struct alignment_of ;
(seit C++11)

Stellt die Member-Konstante value bereit, die gleich den Ausrichtungsanforderungen des Typs T ist, als wäre sie durch einen alignof Ausdruck ermittelt worden. Wenn T ein Array-Typ ist, werden die Ausrichtungsanforderungen des Elementtyps zurückgegeben. Wenn T ein Referenztyp ist, werden die Ausrichtungsanforderungen des referenzierten Typs zurückgegeben.

Wenn alignof ( T ) kein gültiger Ausdruck ist, ist das Verhalten undefiniert.

Falls das Programm Spezialisierungen für std::alignment_of oder std::alignment_of_v (seit C++17) hinzufügt, ist das Verhalten undefiniert.

Inhaltsverzeichnis

Hilfsvariablen-Template

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

Geerbt von std:: integral_constant

Member-Konstanten

value
[static]
alignof ( T )
(öffentliche statische Member-Konstante)

Member-Funktionen

operator std::size_t
konvertiert das Objekt zu std:: size_t , gibt value zurück
(öffentliche Member-Funktion)
operator()
(C++14)
gibt value zurück
(öffentliche Member-Funktion)

Member-Typen

Typ Definition
value_type std:: size_t
type std:: integral_constant < std:: size_t , value >

Mögliche Implementierung

template<class T>
struct alignment_of : std::integral_constant<std::size_t, alignof(T)> {};

Hinweise

Dieser Typ-Trait existierte bereits vor dem alignof Schlüsselwort, das verwendet werden kann, um denselben Wert mit weniger Ausführlichkeit zu erhalten.

Beispiel

#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>() << ' '; // alternative Syntax
    std::cout << std::alignment_of_v<double> << '\n'; // C++17 alternative Syntax
}

Mögliche Ausgabe:

1 2 4 8

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 werden 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)
(seit C++11) (veraltet in C++23)
definiert den Typ, der als nicht initialisierter Speicher für alle gegebenen Typen geeignet ist
(Klassentemplate)
trivialer Typ mit Ausrichtungsanforderung so groß wie jeder andere skalare Typ
(Typdefinition)