As far as I understand it fundamental types are Scalar and Arrays are aggregate but what about user defined types? By what criteria would I divide them into the two categories?
struct S { int i; int j }; class C { public: S s1_; S s2_ }; std::vector<int> V; std::vector<int> *pV = &v;
“C Scalar Data Types” lists C scalar data types, providing their size and format. The alignment of a scalar data type is equal to its size. “Scalar Alignment” shows scalar alignments that apply to individual scalars and to scalars that are elements of an array or members of a structure or union.
A scalar variable, or scalar field, is a variable that holds one value at a time. It is a single component that assumes a range of number or string values. A scalar value is associated with every point in a space.
Scalar data are characterized by the fact that they contain a single value. Thus, they are the building blocks of any information that your perl program will store or manipulate. There are two main types of scalar data in perl: string and numeric.
An integer scalar value consists of one or more digits, optionally preceded by a plus or minus sign and optionally containing underscores.
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 type T
enum
pointer-to-member
nullptr_t
Arrays: T[]
or T[N]
for any complete, non-reference type T
Classes: class Foo
or struct Bar
Trivial classes
Aggregates
POD classes
(etc. etc.)
Unions: union Zip
References types: T &
, T &&
for any object or free-function type T
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.
I think this would be a more comprehensive answer:
original document:
http://howardhinnant.github.io/TypeHiearchy.pdf
a scalar is a fundamental except it cannot be void, but it can be a pointer type, or an enum type.
And a fundamental has a keyword in the language. it is easy to recognize when said like that.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With