std::alignment_of
Von cppreference.com
| Definiert in der Kopfdatei <type_traits> |
||
| template< class T > struct alignment_of; |
(seit C++11) | |
Bietet die Member-Konstante value, die gleich der Ausrichtungsvoraussetzung des Typs T ist, als ob sie durch einen alignof-Ausdruck erhalten worden wäre. Wenn T ein Array-Typ ist, wird die Ausrichtungsvoraussetzung des Elementtyps zurückgegeben. Wenn T ein Referenztyp ist, wird die Ausrichtungsvoraussetzung des referenzierten Typs zurückgegeben.
Wenn alignof(T) kein gültiger Ausdruck ist, ist das Verhalten undefiniert.
Wenn das Programm Spezialisierungen für std::alignment_of oder std::alignment_of_v(seit C++17) hinzufügt, ist das Verhalten undefiniert.
Inhalt |
[bearbeiten] Hilfsvariablentemplate
| template< class T > constexpr std::size_t alignment_of_v = alignment_of<T>::value; |
(seit C++17) | |
Abgeleitet von std::integral_constant
Member-Konstanten
| value [static] |
alignof(T) (öffentliche statische Member-Konstante) |
Memberfunktionen
| operator std::size_t |
konvertiert das Objekt in std::size_t, gibt value zurück (öffentliche Memberfunktion) |
| operator() (C++14) |
gibt value zurück (öffentliche Memberfunktion) |
Membertypen
| Typ | Definition |
value_type
|
std::size_t |
type
|
std::integral_constant<std::size_t, value> |
[bearbeiten] Mögliche Implementierung
template<class T> struct alignment_of : std::integral_constant<std::size_t, alignof(T)> {}; |
[bearbeiten] Anmerkungen
Diese Typ-Trait ist älter als das alignof-Schlüsselwort, das verwendet werden kann, um denselben Wert mit weniger Aufwand zu erhalten.
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#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>() << ' '; // alt syntax std::cout << std::alignment_of_v<double> << '\n'; // c++17 alt syntax }
Mögliche Ausgabe
1 2 4 8
[bearbeiten] Siehe auch
alignof (C++11) |
fragt nach Ausrichtungsanforderungen eines Typs (Operator) |
alignas (C++11) |
gibt an, 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 uninitialisierter Speicher für Typen gegebener Größe geeignet ist (Klassenvorlage) |
| (seit C++11)(veraltet in C++23) |
definiert den Typ, der als uninitialisierter Speicher für alle gegebenen Typen geeignet ist (Klassenvorlage) |
| (C++11) |
trivialer Typ mit einer Ausrichtungsvoraussetzung, die so groß ist wie die jedes anderen Skalar-Typs (typedef) |