Namespaces
Variants

std::type_info::name

De es.cppreference.net
 
 
Biblioteca de utilidades
Soporte del lenguaje
Soporte de tipos (tipos básicos, RTTI)
Macros de prueba de características de la biblioteca (C++20)
Utilidades del programa
Funciones variádicas
Soporte de corrutinas (C++20)
Soporte de contratos (C++26)
Comparación de tres vías
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilidades generales
Operadores relacionales (obsoleto en C++20)
 
Soporte de tipos
Tipos básicos
Tipos enteros de ancho fijo (C++11)
Tipos de coma flotante de ancho fijo (C++23)
(C++11)    
(C++17)
Límites numéricos
Interfaz de límites numéricos de C
Información de tipo en tiempo de ejecución
 
 
const char* name() const;
(noexcept desde C++11)

Devuelve una cadena de caracteres terminada en nulo, definida por la implementación, que contiene el nombre del tipo. No se ofrecen garantías; en particular, la cadena devuelta puede ser idéntica para varios tipos y cambiar entre invocaciones del mismo programa.

Parámetros

(ninguno)

Valor de retorno

Cadena de caracteres terminada en nulo que contiene el nombre del tipo.

Notas

La duración del array apuntado por el puntero devuelto no está especificada, pero en la práctica persiste mientras exista la estructura de datos RTTI para el tipo dado, que tiene la duración de la aplicación a menos que se cargue desde una biblioteca dinámica (que puede ser descargada).

Algunas implementaciones (como MSVC, IBM, Oracle) producen un nombre de tipo legible para humanos. Otras, notablemente gcc y clang, retornan el nombre codificado (mangled), que está especificado por el Itanium C++ ABI . El nombre codificado puede convertirse a formato legible usando APIs específicas de implementación como abi::__cxa_demangle directamente o a través de boost::core::demangle . También puede procesarse mediante la utilidad de línea de comandos c ++ filt - t .

Ejemplo

#include <boost/core/demangle.hpp>
#include <cstdlib>
#include <iostream>
#include <string>
#include <typeinfo>
struct Base { virtual ~Base() = default; };
struct Derived : Base {};
int main()
{
    Base b1;
    Derived d1;
    const Base* pb = &b1;
    std::cout << typeid(*pb).name() << '\n';
    pb = &d1;
    std::cout << typeid(*pb).name() << '\n';
    std::string real_name = boost::core::demangle(typeid(pb).name());
    std::cout << typeid(pb).name() << " => " << real_name << '\n';
    std::cout << "c++filt => " << std::flush;
    std::string s = typeid(pb).name();
    std::system(("c++filt -t " + s).data());
}

Salida posible:

// GCC/Clang:
4Base
7Derived
PK4Base => Base const*
c++filt => Base const*
// MSVC:
struct Base
struct Derived
struct Base const * __ptr64 => struct Base const * __ptr64

Véase también

(C++11)
devuelve un valor que es idéntico para los mismos tipos
(función miembro pública)