std::is_empty - cppreference.com
De cppreference.com
|
|
(desde C++11) | |
std::is_empty es un UnaryTypeTrait.
Si T es un tipo vacío (es un tipo clase que no es una unión, con datos miembro no estáticos distintos de campos de bits de tamaño cero, sin funciones virtuales, sin clases base virtuales, y sin clases base que no están vacías), proporciona la constante miembro value igual a true. Para cualquier otro tipo, value es false.
Si T es un tipo clase que no es una unión, T deberá ser un tipo completo; de lo contrario, el comportamiento está indefinido.
El comportamiento de un programa que añade especializaciones para is_empty o is_empty_v (desde C++17) no está definido.
Parámetros de plantilla
Plantilla de variable auxiliar
|
|
(desde C++17) | |
Heredado de std::integral_constant
Constantes miembro
true si T es un tipo clase vacío, de lo contrario false. (constante miembro pública estática) |
Funciones miembro
Convierte el objeto a bool, devuelve value. (función miembro pública) | |
Devuelve value. (función miembro pública) |
Tipos miembro
| Tipo | Definición |
value_type
|
bool
|
type
|
std::integral_constant<bool, value>
|
Notas
Heredar de clases base vacías habitualmente no incrementa el tamaño de una clase debido a la optimización de clase vacía.
std::is_empty<T> y todos los otros rasgos de tipo son clases vacías.
Ejemplo
#include <iostream> #include <type_traits> struct A {}; struct B { int m; }; struct C { static int m; }; struct D { virtual ~D(); }; union E {}; struct F { [[no_unique_address]] E e; }; int main() { std::cout << std::boolalpha; std::cout << "A " << std::is_empty<A>::value << '\n'; std::cout << "B " << std::is_empty<B>::value << '\n'; std::cout << "C " << std::is_empty<C>::value << '\n'; std::cout << "D " << std::is_empty<D>::value << '\n'; std::cout << "E " << std::is_empty<E>::value << '\n'; std::cout << "F " << std::is_empty<F>::value << '\n'; // el resultado depende de la ABI }
Posible salida:
A true B false C true D false E false F true
Véase también
| Comprueba si un tipo es un tipo clase (pero no un tipo unión). (plantilla de clase) [editar] |