Namensräume
Varianten
Aktionen

alignof Operator (seit C++11)

Von cppreference.com
< cpp‎ | Sprache
 
 
C++ Sprache
Allgemeine Themen
Kontrollfluss
Bedingte Ausführungsaussagen
if
Iterationsanweisungen (Schleifen)
for
Bereichs-for (C++11)
Sprunganweisungen
Funktionen
Funktionsdeklaration
Lambda-Funktionsausdruck
inline-Spezifizierer
Dynamische Ausnahmespezifikationen (bis C++17*)
noexcept-Spezifizierer (C++11)
Ausnahmen
Namensräume
Typen
Spezifizierer
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Speicherdauer-Spezifizierer
Initialisierung
Ausdrücke
Alternative Darstellungen
Literale
Boolesch - Ganzzahl - Gleitkommazahl
Zeichen - String - nullptr (C++11)
Benutzerdefinierte (C++11)
Dienstprogramme
Attribute (C++11)
Typen
typedef-Deklaration
Typalias-Deklaration (C++11)
Umwandlungen
Speicherzuweisung
Klassen
Klassenspezifische Funktionseigenschaften
explicit (C++11)
static

Spezielle Member-Funktionen
Templates
Sonstiges
 
 

Fragt die Ausrichtungsvoraussetzungen eines Typs ab.

Inhalt

[bearbeiten] Syntax

alignof( type-id )

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

[bearbeiten] Erklärung

Gibt die Ausrichtung in Bytes zurück, die für jede Instanz des durch type-id angegebenen Typs erforderlich ist. Dabei handelt es sich um einen vollständigen Objekttyp, einen Array-Typ, dessen Elementtyp vollständig ist, oder einen Referenztyp auf einen dieser Typen.

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

[bearbeiten] Hinweise

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

[bearbeiten] Schlüsselwörter

alignof

[bearbeiten] Beispiel

#include <iostream>
 
struct Foo
{
    int   i;
    float f;
    char  c;
};
 
// Note: alignas(alignof(long double)) below can be
// simplified to alignas(long double) if desired.
struct alignas(alignof(long double)) Foo2
{
    // put your definition here
}; 
 
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

[bearbeiten] 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 keine Referenz auf ein Array darstellen
mit unbekannter Grenze, aber einem vollständigen Elementtyp
erlaubt

[bearbeiten] 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]

[bearbeiten] Siehe auch

Ausrichtungsvoraussetzung beschränkt die Adressen, an denen ein Objekt zugewiesen werden darf
alignas (C++11) gibt an, dass der Speicher für die Variable um einen bestimmten Betrag ausgerichtet werden soll
(Spezifizierer)[bearbeiten]
erhält die Ausrichtungsvoraussetzungen des Typs
(Klassenvorlage) [bearbeiten]
C-Dokumentation für _Alignof, alignof Operator