Espacios de nombres
Variantes
Acciones

std::aligned_union

De cppreference.com
< cpp‎ | types
 
 
Biblioteca de servicios
 
Apoyo de tipos
Propiedades de tipos
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)(hasta C++20)
(C++11)(en desuso en C++20)
(C++11)
Constantes de rasgos de tipos
Metafunciones
(C++17)
Contexto de evaluación constante
Operaciones soportadas
Relaciones y consultas de propiedades
Modificaciones de tipos
Transformaciones de tipos
aligned_union
(C++11)
(C++11)
(C++11)
(C++17)
(C++11)(hasta C++20)(C++17)
 
Definido en el archivo de encabezado <type_traits>
template<std::size_t Len, class... Types>
struct aligned_union;
(desde C++11)

Proporciona el tipo anidado type, que es un tipo trivial de diseño estándar de un tamaño y alineación adecuados para uso en almacenamiento sin inicializar por un objeto de cualquiera de los tipos listados en Types. El tamaño del almacenamiento es como mínimo Len. std::aligned_union también determina el requerimiento de alineación más estricto (el más grande) de entre todos los tipos en Types y lo hace disponible como la constante alignment_value.

Si sizeof...(Types)==0 o si alguno de los tipos en Types no es un tipo objeto completo, el comportamiento está indefinido.

Está definido por la implementación si se soporta cualquier alineación extendida.

El comportamiento de un programa que añade especializaciones para aligned_union no está definido.

Contenido

[editar]Tipos miembro

Nombre Definición
type El tipo trivial adecuado para almacenamiento de cualquier tipo en Types

[editar] Tipos auxiliares

template<std::size_t Len, class... Types>
using aligned_union_t =typename aligned_union<Len,Types...>::type;
(desde C++14)

[editar]Constantes miembro

alignment_value
[estático]
El requerimiento de alineación más estricto de todos los tipos en Types
(constante miembro pública estática)

[editar]Posible implementación

#include <algorithm>template<std::size_t Len, class... Types>struct aligned_union {staticconstexprstd::size_t alignment_value =std::max({alignof(Types)...});   struct type { alignas(alignment_value)char _s[std::max({Len, sizeof(Types)...})];};};

[editar]Ejemplo

[editar]Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 2979 C++11 No se requerían tipos completos Se requieren tipos completos

[editar]Véase también

Obtiene los requisitos de alineación del tipo
(plantilla de clase)[editar]
Define el tipo adecuado para su uso como almacenamiento sin inicializar para tipos de un tamaño dado
(plantilla de clase)[editar]
close