programacion - metodos en c++
¿Qué es un objeto escalar en C++? (3)
Según tengo entendido, los tipos fundamentales son Scalar y los arreglos son agregados, pero ¿qué pasa con los tipos definidos por el usuario? ¿Por qué criterios los dividiría en las dos categorías?
struct S { int i; int j };
class C { public: S s1_; S s2_ };
std::vector<int> V;
std::vector<int> *pV = &v;
Creo que esta sería una respuesta más completa:
documento original:
http://howardhinnant.github.io/TypeHiearchy.pdf
un escalar es un elemento fundamental, excepto que no puede ser anulado, pero puede ser un tipo de puntero o un tipo de enumeración.
Y un fundamental tiene una palabra clave en el lenguaje . 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.
Un tipo escalar es un tipo que tiene funcionalidad incorporada para el operador de adición sin sobrecargas (aritmética, puntero, puntero de miembro, enumeración y
std::nullptr_t
).
También una mesa desde here .
Versión corta: Los tipos en C ++ son:
Tipos de objetos: escalares, matrices, clases, uniones.
Tipos de referencia
Tipos de funciones
(Tipos de miembros) [ver más abajo]
void
Versión larga
Tipos de objeto
Escalares
aritmética (integral, flotador)
punteros:
T *
para cualquier tipoT
enumerar
puntero a miembro
nullptr_t
Arrays:
T[]
oT[N]
para cualquier tipoT
completo, sin referenciaClases:
class Foo
ostruct Bar
Clases triviales
Agregados
Clases de POD
(etcétera etcétera.)
Uniones:
union Zip
Tipos de referencias:
T &
,T &&
para cualquier tipo de objeto o función libreT
Tipos de funciones
Funciones gratuitas:
R foo(Arg1, Arg2, ...)
Funciones de los miembros:
RT::foo(Arg1, Arg2, ...)
void
Los tipos de miembros funcionan así. Un tipo de miembro tiene el formato T::U
, pero no puede tener objetos o variables de tipo miembro. Solo puedes tener punteros de miembro. Un puntero miembro tiene el tipo T::* U
, y es un puntero a objeto miembro si U
es un tipo de objeto (libre) y una función puntero a miembro si U
es un tipo de función (libre) .
Todos los tipos están completos, excepto las matrices anónimas, void
tamaño y las clases y uniones declaradas pero no definidas. Se pueden completar todos los tipos incompletos, excepto el void
.
Todos los tipos pueden ser const
/ volatile
calificados.
El <type_traits>
proporciona clases de rasgos para verificar cada una de estas características de tipo.