- Reference
- Containers
- Input/Output Stream Library
- Atomics and threading library
- Miscellaneous headers
- Update progress
- Built-in types (C++)
- Void type
- std::nullptr_t
- Boolean type
- Character types
- Floating-point types
- Integer types
- Integer type synonyms
- Sizes of built-in types
- C++ built-in operators, precedence, and associativity
- Precedence and associativity
- Alternative spellings
- C++ operator precedence and associativity table
Reference
The elements of the C language library are also included as a subset of the C++ Standard library. These cover many aspects, from general utility functions and macros to input/output functions and dynamic memory management functions:
(assert.h) C Diagnostics Library (header) (ctype.h) Character handling functions (header) (errno.h) C Errors (header) (fenv.h) Floating-point environment (header) (float.h) Characteristics of floating-point types (header) (inttypes.h) C integer types (header) (iso646.h) ISO 646 Alternative operator spellings (header) (limits.h) Sizes of integral types (header) (locale.h) C localization library (header) (math.h) C numerics library (header) (setjmp.h) Non local jumps (header) (signal.h) C library to handle signals (header) (stdarg.h) Variable arguments handling (header) (stdbool.h) Boolean type (header) (stddef.h) C Standard definitions (header) (stdint.h) Integer types (header) (stdio.h) C library to perform Input/Output operations (header) (stdlib.h) C Standard General Utilities Library (header) (string.h) C Strings (header) (tgmath.h) Type-generic math (header) (time.h) C Time Library (header) (uchar.h) Unicode characters (header) (wchar.h) Wide characters (header) (wctype.h) Wide character type (header)
Containers
Input/Output Stream Library
Provides functionality to use an abstraction called streams specially designed to perform input and output operations on sequences of character, like files or strings.
This functionality is provided through several related classes, as shown in the following relationship map, with the corresponding header file names on top:
Atomics and threading library
Miscellaneous headers
Update progress
Work is under progress to update the whole reference to the latest standard. To check the status of each header, see Update progress.
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 aren’t defined in any header file. Built-in types are divided into three main categories: integral, floating-point, and void. Integral types represent whole numbers. Floating-point types can specify values that may have fractional parts. Most built-in types are treated as distinct types by the compiler. However, some types are synonyms, or treated as equivalent types by the compiler.
Void type
The void type describes an empty set of values. No variable of type void can be specified. The void type 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.)
std::nullptr_t
The keyword nullptr is a null-pointer constant of type std::nullptr_t , which is convertible to any raw pointer type. For more information, see nullptr .
Boolean type
The bool type can have values true and false . The size of the bool type is implementation-specific. See Sizes of built-in types for Microsoft-specific implementation details.
Character types
The char type is a character representation type that efficiently encodes members of the basic execution character set. The C++ compiler treats variables of type char , signed char , and unsigned char as having different types.
Microsoft-specific: Variables of type char are promoted to int as if from type signed char by default, unless the /J compilation option is used. In this case, they’re treated as type unsigned char and are promoted to int without sign extension.
A variable of type wchar_t is a wide-character or multibyte character type. Use the L prefix before a character or string literal to specify the wide-character type.
Microsoft-specific: 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.
The char8_t type is used for UTF-8 character representation. It has the same representation as unsigned char , but is treated as a distinct type by the compiler. The char8_t type is new in C++20. Microsoft-specific: use of char8_t requires the /std:c++20 compiler option or later (such as /std:c++latest ).
The char16_t type is used for UTF-16 character representation. It must be large enough to represent any UTF-16 code unit. It’s treated as a distinct type by the compiler.
The char32_t type is used for UTF-32 character representation. It must be large enough to represent any UTF-32 code unit. It’s treated as a distinct type by the compiler.
Floating-point types
Floating-point types use an IEEE-754 representation to provide an approximation of fractional values over a wide range of magnitudes. The following table lists the floating-point types in C++ and the comparative restrictions on floating-point type sizes. These restrictions are mandated by the C++ standard and are independent of the Microsoft implementation. The absolute size of built-in floating-point types isn’t specified in the standard.
Type | Contents |
---|---|
float | Type float is the smallest floating point type in C++. |
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 . |
long double | Type long double is a floating point type that is larger than or equal to type double . |
Microsoft-specific: The representation of long double and double is identical. However, long double and double are treated as distinct types by the compiler. The Microsoft C++ compiler uses the 4- and 8-byte IEEE-754 floating-point representations. For more information, see IEEE floating-point representation.
Integer types
The int type is the default basic integer type. It can represent all of the whole numbers over an implementation-specific range.
A signed integer representation is one that can hold both positive and negative values. It’s used by default, or when the signed modifier keyword is present. The unsigned modifier keyword specifies an unsigned representation that can only hold non-negative values.
A size modifier specifies the width in bits of the integer representation used. The language supports short , long , and long long modifiers. A short type must be at least 16 bits wide. A long type must be at least 32 bits wide. A long long type must be at least 64 bits wide. The standard specifies a size relationship between the integral types:
An implementation must maintain both the minimum size requirements and the size relationship for each type. However, the actual sizes can and do vary between implementations. See Sizes of built-in types for Microsoft-specific implementation details.
The int keyword may be omitted when signed , unsigned , or size modifiers are specified. The modifiers and int type, if present, may appear in any order. For example, short unsigned and unsigned int short refer to the same type.
Integer type synonyms
The following groups of types are considered synonyms by the compiler:
Microsoft-specific integer types include the specific-width __int8 , __int16 , __int32 , and __int64 types. These types may use the signed and unsigned modifiers. The __int8 data type is synonymous with type char , __int16 is synonymous with type short , __int32 is synonymous with type int , and __int64 is synonymous with type long long .
Sizes of built-in types
Most built-in types have implementation-defined sizes. The following table lists the amount of storage required for built-in types in Microsoft C++. In particular, long is 4 bytes even on 64-bit operating systems.
Type | Size |
---|---|
bool , char , char8_t , unsigned char , signed char , __int8 | 1 byte |
char16_t , __int16 , short , unsigned short , wchar_t , __wchar_t | 2 bytes |
char32_t , float , __int32 , int , unsigned int , long , unsigned long | 4 bytes |
double , __int64 , long double , long long , unsigned long long | 8 bytes |
See Data type ranges for a summary of the range of values of each type.
For more information about type conversion, see Standard conversions.
C++ built-in operators, precedence, and associativity
The C++ language includes all C operators and adds several new operators. Operators specify an evaluation to be performed on one or more operands.
Precedence and associativity
Operator precedence specifies the order of operations in expressions that contain more than one operator. Operator associativity specifies whether, in an expression that contains multiple operators with the same precedence, an operand is grouped with the one on its left or the one on its right.
Alternative spellings
C++ specifies alternative spellings for some operators. In C, the alternative spellings are provided as macros in the header. In C++, these alternatives are keywords, and use of or the C++ equivalent is deprecated. In Microsoft C++, the /permissive- or /Za compiler option is required to enable the alternative spellings.
C++ operator precedence and associativity table
The following table shows the precedence and associativity of C++ operators (from highest to lowest precedence). Operators with the same precedence number have equal precedence unless another relationship is explicitly forced by parentheses.
Operator Description | Operator | Alternative |
---|---|---|
Group 1 precedence, no associativity | ||
Scope resolution | :: | |
Group 2 precedence, left to right associativity | ||
Member selection (object or pointer) | . or -> | |
Array subscript | [] | |
Function call | () | |
Postfix increment | ++ | |
Postfix decrement | — | |
Type name | typeid | |
Constant type conversion | const_cast | |
Dynamic type conversion | dynamic_cast | |
Reinterpreted type conversion | reinterpret_cast | |
Static type conversion | static_cast | |
Group 3 precedence, right to left associativity | ||
Size of object or type | sizeof | |
Prefix increment | ++ | |
Prefix decrement | — | |
One’s complement | ~ | compl |
Logical not | ! | not |
Unary negation | — | |
Unary plus | + | |
Address-of | & | |
Indirection | * | |
Create object | new | |
Destroy object | delete | |
Cast | () | |
Group 4 precedence, left to right associativity | ||
Pointer-to-member (objects or pointers) | .* or ->* | |
Group 5 precedence, left to right associativity | ||
Multiplication | * | |
Division | / | |
Modulus | % | |
Group 6 precedence, left to right associativity | ||
Addition | + | |
Subtraction | — | |
Group 7 precedence, left to right associativity | ||
Left shift | ||
Right shift | >> | |
Group 8 precedence, left to right associativity | ||
Less than | < | |
Greater than | > | |
Less than or equal to | ||
Greater than or equal to | >= | |
Group 9 precedence, left to right associativity | ||
Equality | == | |
Inequality | != | not_eq |
Group 10 precedence left to right associativity | ||
Bitwise AND | & | bitand |
Group 11 precedence, left to right associativity | ||
Bitwise exclusive OR | ^ | xor |
Group 12 precedence, left to right associativity | ||
Bitwise inclusive OR | | | bitor |
Group 13 precedence, left to right associativity | ||
Logical AND | && | and |
Group 14 precedence, left to right associativity | ||
Logical OR | || | or |
Group 15 precedence, right to left associativity | ||
Conditional | ? : | |
Assignment | = | |
Multiplication assignment | *= | |
Division assignment | /= | |
Modulus assignment | %= | |
Addition assignment | += | |
Subtraction assignment | -= | |
Left-shift assignment | < | |
Right-shift assignment | >>= | |
Bitwise AND assignment | &= | and_eq |
Bitwise inclusive OR assignment | |= | or_eq |
Bitwise exclusive OR assignment | ^= | xor_eq |
throw expression | throw | |
Group 16 precedence, left to right associativity | ||
Comma | , |