Namespaces
Variants

std:: alignment_of

From cppreference.net
Metaprogramming library
Type traits
Type categories
(C++11)
(C++11) ( DR* )
Type properties
(C++11)
(C++11)
(C++14)
(C++11) (deprecated in C++26)
(C++11) ( until C++20* )
(C++11) (deprecated in C++20)
(C++11)
Type trait constants
Metafunctions
(C++17)
Supported operations
Relationships and property queries
(C++11)
alignment_of
(C++11)
(C++11)
(C++11)
Type modifications
Type transformations
(C++11) (deprecated in C++23)
(C++11) (deprecated in C++23)
(C++11)
(C++11) ( until C++20* ) (C++17)

Compile-time rational arithmetic
Compile-time integer sequences
Definido en el encabezado <type_traits>
template < class T >
struct alignment_of ;
(desde C++11)

Proporciona la constante miembro value igual al requisito de alineamiento del tipo T , como si se obtuviera mediante una expresión alignof . Si T es un tipo array, retorna los requisitos de alineamiento del tipo elemento. Si T es un tipo referencia, retorna los requisitos de alineamiento del tipo referenciado.

Si alignof ( T ) no es una expresión válida, el comportamiento es indefinido.

Si el programa añade especializaciones para std::alignment_of o std::alignment_of_v (desde C++17) , el comportamiento es indefinido.

Contenidos

Plantilla de variable auxiliar

template < class T >
constexpr std:: size_t alignment_of_v = alignment_of < T > :: value ;
(desde C++17)

Heredado de std:: integral_constant

Constantes miembro

value
[static]
alignof ( T )
(constante miembro pública estática)

Funciones miembro

operator std::size_t
convierte el objeto a std:: size_t , devuelve value
(función miembro pública)
operator()
(C++14)
devuelve value
(función miembro pública)

Tipos miembro

Tipo Definición
value_type std:: size_t
type std:: integral_constant < std:: size_t , value >

Implementación posible

template<class T>
struct alignment_of : std::integral_constant<std::size_t, alignof(T)> {};

Notas

Este rasgo de tipo precede a la palabra clave alignof , que puede utilizarse para obtener el mismo valor con menos verbosidad.

Ejemplo

#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>() << ' '; // sintaxis alternativa
    std::cout << std::alignment_of_v<double> << '\n'; // sintaxis alternativa de C++17
}

Salida posible:

1 2 4 8

Véase también

alignof (C++11) consulta los requisitos de alineación de un tipo
(operador)
alignas (C++11) especifica que el almacenamiento para la variable debe estar alineado por una cantidad específica
(especificador)
(since C++11) (deprecated in C++23)
define el tipo adecuado para usar como almacenamiento no inicializado para tipos de tamaño dado
(class template)
(since C++11) (deprecated in C++23)
define el tipo adecuado para usar como almacenamiento no inicializado para todos los tipos dados
(class template)
tipo trivial con requisito de alineación tan grande como cualquier otro tipo escalar
(typedef)