C++ Standard Library
The C++ standard library provides a wide range of facilities that are usable in standard C++.
Contents |
Category
The language support library provides components that are required by certain parts of the C++ language, such as memory allocation (new/delete) and exception processing.
The concepts library describes library components that C++ programs may use to perform compile-time validation of template arguments and perform function dispatch based on properties of types.
The diagnostics library provides a consistent framework for reporting errors in a C++ program, including [[cpp/error#Exception categories|predefined exception classes}}.
The memory management library provides components for memory management, including smart pointers and scoped allocators(since C++11).
The metaprogramming library describes facilities for use in templates and during constant evaluation, including type traits, integer sequence,(since C++14) and rational arithmetic. |
(since C++11) |
The general utilities library includes components used by other library elements, such as a predefined storage allocator for dynamic storage management, and components used as infrastructure in C++ programs, such as tuples and(since C++11) function wrappers.
The strings library provides support for manipulating text represented as sequences of type char, sequences of type char8_t,(since C++20) sequences of type char16_t, sequences of type char32_t,(since C++11) sequences of type wchar_t, and sequences of any other character-like type.
The containers, iterators, ranges,(since C++20) and algorithms libraries provide a C++ program with access to a subset of the most widely used algorithms and data structures.
The numerics library provides numeric algorithms and complex number components that extend support for numeric processing. The valarray component provides support for n-at-a-time processing, potentially implemented as parallel operations on platforms that support such processing. The random number component provides facilities for generating pseudo-random numbers.(since C++11)
The time library provides generally useful time utilities.
The localization library provides extended internationalization support for text processing.
Theinput/output library provides the iostream components that are the primary mechanism for C++ program input and output. They can be used with other elements of the library, particularly strings, locales, and iterators.
The regular expressions library provides regular expression matching and searching. The thread support library provides components to create and manage threads, including atomic operations, mutual exclusion, and interthread communication. |
(since C++11) |
Library contents
The C++ standard library provides definitions for the entities and macros described in the synopses of the C++ standard library headers, unless otherwise specified.
All library entities except operator new and operator delete are defined within the namespace std or namespaces nested within namespace std (except the entities for the C standard library facilities, see below). It is unspecified whether names declared in a specific namespace are declared directly in that namespace or in an inline namespace inside that namespace.(since C++11)
Headers
Each element of the C++ standard library is declared or defined (as appropriate) in a header . A header is not necessarily a source file, nor are the sequences delimited by < and > in header names necessarily valid source file names.
The C++ standard library provides the C++ library headers and additional C++ headers for C library facilities (see 'headers' page for descriptions):
C++ headers for C library facilities | |||
---|---|---|---|
<cassert> | <clocale> | <cstdarg> | <cstring> |
<cctype> | <cmath> | <cstddef> | <ctime> |
<cerrno> | <csetjmp> | <cstdio> | <cwchar> |
<cfloat> | <csignal> | <cstdlib> | <cwctype> |
<climits> | |||
Headers removed in C++20 | |||
<ciso646> | |||
Headers added in C++11 | |||
<cfenv> | <cinttypes> | <cstdint> | <cuchar> |
Headers added in C++11, deprecated in C++17, and removed in C++20 | |||
<ccomplex> | <cstdalign> | <cstdbool> | <ctgmath> |
A freestanding implementation has an implementation-defined set of headers, see here for the minimal requirement on the set of headers.
C standard library
The C++ standard library also makes available the facilities of the C standard library, suitably adjusted to ensure static type safety. The descriptions of many library functions rely on the C standard library for the semantics of those functions.
In some cases, the signatures specified in standard C++ may be different from the signatures in the C standard library, and additional overloads may be declared, but the behavior and the preconditions are the same unless otherwise stated.
For compatibility with the C standard library, the C++ standard library provides the C headers listed below. The intended use of these headers is for interoperability only. It is possible that C++ source files need to include one of these headers in order to be valid ISO C. Source files that are not intended to also be valid ISO C should not use any of the C headers. See here for descriptions.
C headers | |||
---|---|---|---|
<assert.h> | <limits.h> | <stdarg.h> | <string.h> |
<ctype.h> | <locale.h> | <stddef.h> | <time.h> |
<errno.h> | <math.h> | <stdio.h> | <wchar.h> |
<float.h> | <setjmp.h> | <stdlib.h> | <wctype.h> |
<iso646.h> | <signal.h> | ||
Headers added in C++11 | |||
<complex.h> | <inttypes.h> | <stdbool.h> | <tgmath.h> |
<fenv.h> | <stdalign.h> | <stdint.h> | <uchar.h> |
Headers added in C++23 | |||
<stdatomic.h> |
Except otherwise noted, the contents of each header cXXXX is the same as that of the corresponding header XXXX.h as specified in the C standard library. In the C++ standard library, however, the declarations (except for names which are defined as macros in C) are within namespace scope of the namespace std. It is unspecified whether these names (including any overloads added) are first declared within the global namespace scope and are then injected into namespace std by explicit using-declarations.
Names which are defined as macros in C (assert, offsetof, setjmp, va_arg, va_end and va_start) must be defined as macros in the C++ standard library, even if C grants license for implementation as functions.
Names that are defined as functions in C must be defined as functions in the C++ standard library. This disallows the practice, allowed in C, of providing a masking macro in addition to the function prototype. The only way to achieve equivalent inline behavior in C++ is to provide a definition as an extern inline function.
Identifiers that are keywords or operators in C++ cannot be defined as macros in C++ standard library headers. In particular, including the standard header <iso646.h> has no effect.
Names associated with safe functions in standard C (since C++17)
If any C++ header is included, it is implementation-defined whether any of the following C standard Annex K names is declared in the global namespace (none of them is declared in namespace std):
C standard Annex K names | |||
---|---|---|---|
abort_handler_s
|
mbstowcs_s
|
strncat_s
|
vswscanf_s
|
asctime_s
|
memcpy_s
|
strncpy_s
|
vwprintf_s
|
bsearch_s
|
memmove_s
|
strtok_s
|
vwscanf_s
|
constraint_handler_t
|
memset_s
|
swprintf_s
|
wcrtomb_s
|
ctime_s
|
printf_s
|
swscanf_s
|
wcscat_s
|
errno_t
|
qsort_s
|
tmpfile_s
|
wcscpy_s
|
fopen_s
|
RSIZE_MAX
|
TMP_MAX_S
|
wcsncat_s
|
fprintf_s
|
rsize_t
|
tmpnam_s
|
wcsncpy_s
|
freopen_s
|
scanf_s
|
vfprintf_s
|
wcsnlen_s
|
fscanf_s
|
set_constraint_handler_s
|
vfscanf_s
|
wcsrtombs_s
|
fwprintf_s
|
snprintf_s
|
vfwprintf_s
|
wcstok_s
|
fwscanf_s
|
snwprintf_s
|
vfwscanf_s
|
wcstombs_s
|
gets_s
|
sscanf_s
|
vscanf_s
|
wmemcpy_s
|
gmtime_s
|
mbstowcs_s
|
strncat_s
|
vswscanf_s
|
abort_handler_s
|
strcat_s
|
vsnprintf_s
|
wmemmove_s
|
ignore_handler_s
|
strcpy_s
|
vsnwprintf_s
|
wprintf_s
|
localtime_s
|
strerrorlen_s
|
vsprintf_s
|
wscanf_s
|
L_tmpnam_s
|
strerror_s
|
vsscanf_s
|
|
mbsrtowcs_s
|
strlen_s
|
vswprintf_s
|