Short version: Types in C++ are:
Object types: scalars, arrays, classes, unions
Reference types
Function types
(Member types) [see below]
void
Long version
Object types
Scalars
arithmetic (integral, float)
pointers:
T *
for any typeT
enum
pointer-to-member
nullptr_t
Arrays:
T[]
orT[N]
for any complete, non-reference typeT
Classes:
class Foo
orstruct Bar
Trivial classes
Aggregates
POD classes
(etc. etc.)
Unions:
union Zip
References types:
T &
,T &&
for any object or free-function typeT
Function types
Free functions:
R foo(Arg1, Arg2, ...)
Member functions:
R T::foo(Arg1, Arg2, ...)
void
Member types work like this. A member type is of the form T::U
, but you can’t have objects or variables of member type. You can only have member pointers. A member pointer has type T::* U
, and it is a pointer-to-member-object if U
is a (free) object type, and a pointer-to-member-function if U
is a (free) function type.
All types are complete except void
, unsized arrays and declared-but-not-defined classes and unions. All incomplete types except void
can be completed.
All types can be const
/volatile
qualified.
The <type_traits>
header provides trait classes to check for each of these type characteristics.