Built-in types (C++)
Built-in types (also called fundamental types) are specified by the C++ language standard and are built into the compiler. Built-in types are not defined in any header file. Built-in types are divided into three categories: integral, floating point, and void. Integral types are capable of handling whole numbers. Floating point types are capable of specifying values that may have fractional parts.
The void type describes an empty set of values. No variable of type void can be specified — it is used primarily to declare functions that return no values or to declare generic pointers to untyped or arbitrarily typed data. Any expression can be explicitly converted or cast to type void. However, such expressions are restricted to the following uses:
An expression statement. (For more information, see Expressions.)
The left operand of the comma operator. (For more information, see Comma Operator.)
The second or third operand of the conditional operator (
? :). (For more information, see Expressions with the Conditional Operator.)
The following table explains the restrictions on type sizes in relation to each other. These restrictions are mandated by the C++ standard and are independent of the Microsoft implementation. The absolute size of certain built-in types is not specified in the standard.
Built-in type size restrictions
|Integral||char||Type char is an integral type that usually contains members of the basic execution character set — By default, this is ASCII in Microsoft C++.
The C++ compiler treats variables of type char, signed char, and unsigned char as having different types. Variables of type char are promoted to int as if they are type signed char by default, unless the /J compilation option is used. In this case, they are treated as type unsigned char and are promoted to int without sign extension.
|bool||Type bool is an integral type that can have one of the two values true or false. Its size is unspecified.|
|short||Type short int (or simply short) is an integral type that is larger than or equal to the size of type char, and shorter than or equal to the size of type int.
Objects of type short can be declared as signed short or unsigned short. Signed short is a synonym for short.
|int||Type int is an integral type that is larger than or equal to the size of type short int, and shorter than or equal to the size of type long.
Objects of type int can be declared as signed int or unsigned int. Signed int is a synonym for int.
|__int8, __int16, __int32, __int64||Sized integer
|long||Type long (or long int) is an integral type that is larger than or equal to the size of type int. (On Windows long is the same size as int.)
Objects of type long can be declared as signed long or unsigned long. Signed long is a synonym for long.
|long long||Larger than an unsigned long.
Objects of type long long can be declared as signed long long or unsigned long long. signed long long is a synonym for long long.
|wchar_t, __wchar_t||A variable of type wchar_t designates a wide-character or multibyte character type. By default, wchar_t is a native type, but you can use /Zc:wchar_t- to make wchar_t a typedef for unsigned short. The __wchar_t type is a Microsoft-specific synonym for the native wchar_t type.
Use the L prefix before a character or string literal to designate the wide-character type.
|Floating point||float||Type float is the smallest floating point type.|
|double||Type double is a floating point type that is larger than or equal to type float, but shorter than or equal to the size of type long double.
Microsoft-specific: The representation of long double and double is identical. However, long double and double are separate types.
|long double||Type long double is a floating point type that is larger than or equal to type double.|
The following table lists the amount of storage required for built-in types in Microsoft C++. In particular, note that long is 4 bytes even on 64-bit operating systems.
Sizes of built-in types
|bool, char, unsigned char, signed char, __int8||1 byte|
|__int16, short, unsigned short, wchar_t, __wchar_t||2 bytes|
|float, __int32, int, unsigned int, long, unsigned long||4 bytes|
|double, __int64, long double, long long||8 bytes|
END Microsoft Specific
See Data Type Ranges for a summary of the range of values of each type.
For more information about type conversion, see Standard Conversions.