Te traemos la respuesta a esta impedimento, o por lo menos eso esperamos. Si sigues con inquietudes puedes escribirlo en el apartado de comentarios y con placer te responderemos
Solución:
Version corta: Los tipos en C++ son:
-
Tipos de objetos: escalares, arreglos, clases, uniones
-
Tipos de referencia
-
Tipos de funciones
-
(Tipos de miembros) [see below]
-
void
Versión larga
-
Tipos de objetos
-
escalares
-
aritmética (integral, flotante)
-
punteros:
T *
para cualquier tipoT
-
enumeración
-
puntero a miembro
-
nullptr_t
-
-
Matrices:
T[]
oT[N]
para cualquier tipo completo, sin referenciaT
-
Clases:
class Foo
ostruct Bar
-
Clases triviales
-
agregados
-
Clases POD
-
(etcétera etcétera.)
-
-
Sindicatos:
union Zip
-
-
Tipos de referencias:
T &
,T &&
para cualquier objeto o tipo de función libreT
-
Tipos de funciones
-
Funciones gratuitas:
R foo(Arg1, Arg2, ...)
-
Funciones de los miembros:
R T::foo(Arg1, Arg2, ...)
-
-
void
Los tipos de miembros funcionan así. Un tipo de miembro es de la forma T::U
, pero no puede tener objetos o variables de tipo miembro. Solo puedes tener miembro punteros. Un puntero miembro tiene tipo T::* U
, y es un puntero a objeto miembro si U
es un tipo de objeto (libre) y una función de puntero a miembro si U
es un tipo de función (libre).
Todos los tipos están completos excepto void
, matrices sin tamaño y clases y uniones declaradas pero no definidas. Todos los tipos incompletos excepto void
se puede completar
Todos los tipos pueden ser const
/volatile
calificado.
El
header proporciona clases de rasgos para verificar cada una de estas características de tipo.
Creo que esta sería una respuesta más completa:
documento original:
http://howardhinnant.github.io/TypeHiarchy.pdf
un escalar es un fundamental excepto que no puede ser void, pero puede ser un tipo de puntero o un tipo de enumeración.
Y un fundamental tiene una palabra clave en el idioma. es fácil de reconocer cuando se dice así.
Hay una serie de clases de biblioteca que se utilizan para probar el tipo de variables. std::is_scalar
se puede usar para probar si un objeto es un escalar.
A tipo escalar es un tipo que tiene una funcionalidad integrada para el operador de suma sin sobrecargas (aritmética, puntero, puntero miembro, enumeración y
std::nullptr_t
).
También una tabla de aquí.
Si crees que te ha sido útil este post, sería de mucha ayuda si lo compartieras con otros programadores y nos ayudes a dar difusión a este contenido.