Namespaces
Variants

alignof operator (since C++11)

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous

Fragt die Ausrichtungsanforderungen eines Typs ab.

Inhaltsverzeichnis

Syntax

alignof( Typ-ID )

Gibt einen Wert vom Typ std::size_t zurück.

Erklärung

Gibt die Ausrichtung in Bytes zurück, die für jede Instanz des durch type-id angegebenen Typs erforderlich ist, welcher entweder ein vollständiger Objekttyp, ein Array-Typ mit vollständigem Elementtyp oder ein Referenztyp auf einen dieser Typen ist.

Wenn der Typ ein Referenztyp ist, gibt der Operator die Ausrichtung des referenzierten Typs zurück; wenn der Typ ein Arraytyp ist, wird die Ausrichtungsanforderung des Elementtyps zurückgegeben.

Hinweise

Siehe alignment für die Bedeutung und Eigenschaften des von alignof zurückgegebenen Werts.

Schlüsselwörter

alignof

Beispiel

#include <iostream>
struct Foo
{
    int   i;
    float f;
    char  c;
};
// Hinweis: alignas(alignof(long double)) unten kann zu
// alignas(long double) vereinfacht werden, falls gewünscht.
struct alignas(alignof(long double)) Foo2
{
    // Fügen Sie hier Ihre Definition ein
}; 
struct Empty {};
struct alignas(64) Empty64 {};
#define SHOW(expr) std::cout << #expr << " = " << (expr) << '\n'
int main()
{
    SHOW(alignof(char));
    SHOW(alignof(int*));
    SHOW(alignof(Foo));
    SHOW(alignof(Foo2));
    SHOW(alignof(Empty));
    SHOW(alignof(Empty64));
}

Mögliche Ausgabe:

alignof(char) = 1
alignof(int*) = 8
alignof(Foo) = 4
alignof(Foo2) = 16
alignof(Empty) = 1
alignof(Empty64) = 64

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
CWG 1305 C++11 type-id konnte keinen Verweis auf ein Array
mit unbekannter Grenze, aber vollständigem Elementtyp darstellen
erlaubt

Referenzen

  • C++23-Standard (ISO/IEC 14882:2024):
  • 7.6.2.6 Alignof [expr.alignof]
  • C++20-Standard (ISO/IEC 14882:2020):
  • 7.6.2.5 Alignof [expr.alignof]
  • C++17-Standard (ISO/IEC 14882:2017):
  • 8.3.6 Alignof [expr.alignof]
  • C++14-Standard (ISO/IEC 14882:2014):
  • 5.3.6 Alignof [expr.alignof]
  • C++11-Standard (ISO/IEC 14882:2011):
  • 5.3.6 Alignof [expr.alignof]

Siehe auch

Alignment requirement schränkt die Adressen ein, an denen ein Objekt allokiert werden kann
alignas (C++11) spezifiziert, dass der Speicher für die Variable an einer bestimmten Grenze ausgerichtet sein soll
(Spezifizierer)
ermittelt die Ausrichtungsanforderungen eines Typs
(Klassentemplate)
C-Dokumentation für _Alignof , alignof Operator