std:: alignment_of
| Type traits | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Compile-time rational arithmetic | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Compile-time integer sequences | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
(C++14)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
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) |
|
(C++11)
|
trivialer Typ mit Ausrichtungsanforderung so groß wie jeder andere skalare Typ
(Typdefinition) |