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

Interroge les exigences d'alignement d'un type.

Table des matières

Syntaxe

alignof( type-id )

Retourne une valeur de type std::size_t .

Explication

Retourne l'alignement , en octets, requis pour toute instance du type indiqué par type-id , qui est soit un type d'objet complet , un type tableau dont le type d'élément est complet, ou un type référence vers l'un de ces types.

Si le type est un type référence, l'opérateur retourne l'alignement du type référencé ; si le type est un type tableau, l'exigence d'alignement du type élément est retournée.

Notes

Voir alignment pour la signification et les propriétés de la valeur retournée par alignof .

Mots-clés

alignof

Exemple

#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));
}

Sortie possible :

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

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Applicable à Comportement publié Comportement corrigé
CWG 1305 C++11 type-id ne pouvait pas représenter une référence à un tableau
avec une limite inconnue mais un type d'élément complet
autorisé

Références

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

Voir aussi

Exigence d'alignement restreint les adresses auxquelles un objet peut être alloué
alignas (C++11) spécifie que le stockage de la variable doit être aligné selon une valeur spécifique
(spécificateur)
obtient les exigences d'alignement du type
(modèle de classe)
Documentation C pour _Alignof , alignof opérateur