Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/header"

From cppreference.com
< cpp
(sorted headers)
(C compatibility headers: P2340R1)
Line 144: Line 144:
  
 
===C compatibility headers===
 
===C compatibility headers===
For some of the C standard library headers of the form {{c|xxx.h}}, the C++ standard library both includes an identically-named header and another header of the form {{c|cxxx}} (all meaningful {{c|cxxx}} headers are listed above).
+
For some of the C standard library headers of the form {{tt|''xxx''.h}}, the C++ standard library both includes an identically-named header and another header of the form {{tt|c''xxx''}} (all meaningful {{tt|c''xxx''}} headers are listed above). The intended use of headers of form {{tt|''xxx''.h}} 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.
  
With the exception of {{c|complex.h}}{{mark unreviewed dr|LWG}}<!--LWG 551/2536-->, each {{c|xxx.h}} header included in the C++ standard library places in the global namespace each name that the corresponding {{c|cxxx}} header would have placed in the {{c|std}} namespace.
+
With the exception of {{rlt|ccomplex|complex.h}}{{mark unreviewed dr|LWG}}<!--LWG 551/2536-->, each {{tt|''xxx''.h}} header included in the C++ standard library places in the global namespace each name that the corresponding {{tt|c''xxx''}} header would have placed in the {{c|std}} namespace.
  
These headers are allowed to also declare the same names in the {{c|std}} namespace, and the corresponding {{c|cxxx}} headers are allowed to also declare the same names in the global namespace: including <cstdlib> definitely provides {{c|std::malloc}} and may also provide {{c|::malloc}}. Including <stdlib.h> definitely provides {{c|::malloc}} and may also provide {{c|std::malloc}}. This applies even to functions and function overloads that are not part of C standard library.
+
These headers are allowed to also declare the same names in the {{c|std}} namespace, and the corresponding {{tt|c''xxx''}} headers are allowed to also declare the same names in the global namespace: including {{tt|<cstdlib>}} definitely provides {{c|std::malloc}} and may also provide {{c|::malloc}}. Including {{tt|<stdlib.h>}} definitely provides {{c|::malloc}} and may also provide {{c|std::malloc}}. This applies even to functions and function overloads that are not part of C standard library.
 +
 
 +
Notes: {{tt|''xxx''.h}} headers are deprecated in C++98 and undeprecated in C++23. These headers are not discouraged for pure C++ code, but not subject to future removal.
  
 
{{dsc begin}}
 
{{dsc begin}}
Line 175: Line 177:
  
 
====Special C compatibility headers====
 
====Special C compatibility headers====
The header {{tt|<stdatomic.h>}} declares names which are also provided in the C standard library, and defines the {{tt|_Atomic}} macro which is a [[c/keyword/_Atomic|keyword]] in C. Unlike other {{c|xxx.h}} headers, corresponding {{tt|<cstdatomic>}} is not provided.
+
The header {{tt|<stdatomic.h>}} declares names which are also provided in the C standard library, and defines the {{tt|_Atomic}} macro which is a [[c/keyword/_Atomic|keyword]] in C. Unlike other {{tt|''xxx''.h}} headers, corresponding {{tt|<cstdatomic>}} is not provided.
  
 
{{dsc begin}}
 
{{dsc begin}}
Line 182: Line 184:
  
 
====Empty C headers====
 
====Empty C headers====
The headers {{tt|<complex.h>}}, {{tt|<ccomplex>}}, {{tt|<tgmath.h>}}, and {{tt|<ctgmath>}} do not contain any content from the C standard library and instead merely include other headers from the C++ standard library. The use of all these headers is deprecated in C++.
+
The headers {{tt|<complex.h>}}, {{tt|<ccomplex>}}, {{tt|<tgmath.h>}}, and {{tt|<ctgmath>}} do not contain any content from the C standard library and instead merely include other headers from the C++ standard library.
  
 
{{dsc begin}}
 
{{dsc begin}}
Line 204: Line 206:
  
 
====Unsupported C headers====
 
====Unsupported C headers====
The C headers {{rev inl|until=c++23|{{tt|<stdatomic.h>}},}} {{tt|<stdnoreturn.h>}}, and {{tt|<threads.h>}} are not included in C++ and have no {{c|cxxx}} equivalents.
+
The C headers {{rev inl|until=c++23|{{tt|<stdatomic.h>}},}} {{tt|<stdnoreturn.h>}}, and {{tt|<threads.h>}} are not included in C++ and have no {{tt|c''xxx''}} equivalents.
  
 
==={{rl|experimental|Experimental libraries}}===
 
==={{rl|experimental|Experimental libraries}}===

Revision as of 21:07, 5 October 2021

 
 
Standard library headers
 

The interface of C++ standard library is defined by the following collection of headers.

Contents

Concepts library

Fundamental library concepts[edit]

Coroutines library

Coroutine support library[edit]

Utilities library

(C++17)
std::any class[edit]
std::bitset class template[edit]
(C++11)
C++ time utilities[edit]
(C++20)
Three-way comparison operator support[edit]
Macro (and function) that saves (and jumps) to an execution context[edit]
Functions and macro constants for signal management[edit]
Handling of variable length argument lists[edit]
Standard macros and typedefs[edit]
General purpose utilities: program control, dynamic memory allocation, random numbers, sort and search[edit]
C-style time/date utilities[edit]
Function objects, Function invocations, Bind operations and Reference wrappers[edit]
std::initializer_list class template[edit]
std::optional class template[edit]
Supplies means to obtain source code location[edit]
Stacktrace library[edit]
(C++11)
std::tuple class template[edit]
Compile-time type information utilities[edit]
std::type_index[edit]
Runtime type information utilities[edit]
Various utility components[edit]
(C++17)
std::variant class template[edit]
(C++20)
Supplies macros for verifying implementation status of library[edit]
Dynamic memory management
High-level memory management utilities[edit]
Polymorphic allocators and memory resources[edit]
Low-level memory management utilities[edit]
Nested allocator class[edit]
Numeric limits
Limits of floating-point types[edit]
Formatting macros, intmax_t and uintmax_t math and conversions[edit]
Limits of integral types[edit]
(C++11)
Fixed-width integer types and limits of other types[edit]
Query properties of arithmetic types[edit]
Error handling
Conditionally compiled macro that compares its argument to zero[edit]
Macro containing the last error number[edit]
Exception handling utilities[edit]
Standard exception types[edit]
Defines std::error_code, a platform-dependent error code[edit]

Strings library

Functions to determine the category of narrow characters[edit]
std::to_chars and std::from_chars[edit]
Various narrow character string handling functions[edit]
(C++11)
C-style Unicode character conversion functions[edit]
Various wide and multibyte string handling functions[edit]
Functions to determine the category of wide characters[edit]
(C++20)
Formatting library including std::format[edit]
std::basic_string class template[edit]
std::basic_string_view class template[edit]

Containers library

(C++11)
std::array container[edit]
std::deque container[edit]
std::forward_list container[edit]
std::list container[edit]
std::map and std::multimap associative containers[edit]
std::queue and std::priority_queue container adaptors[edit]
std::set and std::multiset associative containers[edit]
(C++20)
std::span view[edit]
std::stack container adaptor[edit]
std::unordered_map and std::unordered_multimap unordered associative containers[edit]
std::unordered_set and std::unordered_multiset unordered associative containers[edit]
std::vector container[edit]

Iterators library

Range iterators[edit]

Ranges library

(C++20)
Range access, primitives, requirements, utilities and adaptors[edit]

Algorithms library

Algorithms that operate on ranges[edit]
Predefined execution policies for parallel versions of the algorithms and execution control components(since C++26)[edit]

Numerics library

(C++20)
Bit manipulation functions[edit]
(C++11)
Floating-point environment access functions[edit]
Common mathematics functions[edit]
Complex number type[edit]
(C++20)
Math constants[edit]
Numeric operations on values in ranges[edit]
(C++11)
Random number generators and distributions[edit]
(C++11)
Compile-time rational arithmetic[edit]
Class for representing and manipulating arrays of values[edit]

Localization library

C localization utilities[edit]
(C++11)(deprecated in C++17)(removed in C++26)
Unicode conversion facilities[edit]
Localization utilities[edit]

Input/output library

C-style input-output functions[edit]
std::basic_fstream, std::basic_ifstream, std::basic_ofstream class templates and typedefs[edit]
Helper functions to control the format of input and output[edit]
std::ios_base class, std::basic_ios class template and typedefs[edit]
Forward declarations of all classes in the input/output library[edit]
Several standard stream objects[edit]
std::basic_istream class template and typedefs[edit]
std::basic_ostream, std::basic_iostream class templates and typedefs[edit]
std::basic_spanstream, std::basic_ispanstream, std::basic_ospanstream class templates and typedefs[edit]
std::basic_stringstream, std::basic_istringstream, std::basic_ostringstream class templates and typedefs[edit]
std::basic_streambuf class template[edit]
(deprecated in C++98)(removed in C++26)
std::strstream, std::istrstream, std::ostrstream[edit]
std::basic_osyncstream, std::basic_syncbuf and typedefs[edit]

Filesystem library

std::filesystem::path class and supporting functions[edit]

Regular Expressions library

(C++11)
Classes, algorithms and iterators to support regular expression processing[edit]

Atomic Operations library

(C++11)
Atomic operations library[edit]

Thread support library

(C++20)
Barriers[edit]
Thread waiting conditions[edit]
(C++11)
Primitives for asynchronous computations[edit]
(C++20)
Latches[edit]
(C++11)
Mutual exclusion primitives[edit]
Semaphores[edit]
Shared mutual exclusion primitives[edit]
Stop tokens for std::jthread[edit]
(C++11)
std::thread class and supporting functions[edit]

C compatibility headers

For some of the C standard library headers of the form xxx.h, the C++ standard library both includes an identically-named header and another header of the form cxxx (all meaningful cxxx headers are listed above). The intended use of headers of form xxx.h 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.

With the exception of complex.h, each xxx.h header included in the C++ standard library places in the global namespace each name that the corresponding cxxx header would have placed in the std namespace.

These headers are allowed to also declare the same names in the std namespace, and the corresponding cxxx headers are allowed to also declare the same names in the global namespace: including <cstdlib> definitely provides std::malloc and may also provide ::malloc. Including <stdlib.h> definitely provides ::malloc and may also provide std::malloc. This applies even to functions and function overloads that are not part of C standard library.

Notes: xxx.h headers are deprecated in C++98 and undeprecated in C++23. These headers are not discouraged for pure C++ code, but not subject to future removal.

Behaves same as <cassert>[edit]
Behaves as if each name from <cctype> is placed in global namespace[edit]
Behaves same as <cerrno>[edit]
(C++11)
Behaves as if each name from <cfenv> is placed in global namespace[edit]
Behaves same as <cfloat>[edit]
Behaves as if each name from <cinttypes> is placed in global namespace[edit]
Behaves same as <climits>[edit]
Behaves as if each name from <clocale> is placed in global namespace[edit]
Behaves as if each name from <cmath> is placed in global namespace,
except for names of mathematical special functions[edit]
Behaves as if each name from <csetjmp> is placed in global namespace[edit]
Behaves as if each name from <csignal> is placed in global namespace[edit]
Behaves as if each name from <cstdarg> is placed in global namespace[edit]
Behaves as if each name from <cstddef> is placed in global namespace,
except for names of std::byte and related functions[edit]
Behaves as if each name from <cstdint> is placed in global namespace[edit]
Behaves as if each name from <cstdio> is placed in global namespace[edit]
Behaves as if each name from <cstdlib> is placed in global namespace[edit]
Behaves as if each name from <cstring> is placed in global namespace[edit]
Behaves as if each name from <ctime> is placed in global namespace[edit]
(C++11)
Behaves as if each name from <cuchar> is placed in global namespace[edit]
Behaves as if each name from <cwchar> is placed in global namespace[edit]
Behaves as if each name from <cwctype> is placed in global namespace[edit]

Special C compatibility headers

The header <stdatomic.h> declares names which are also provided in the C standard library, and defines the _Atomic macro which is a keyword in C. Unlike other xxx.h headers, corresponding <cstdatomic> is not provided.

Defines _Atomic and provides corresponding components in the C standard library[edit]

Empty C headers

The headers <complex.h>, <ccomplex>, <tgmath.h>, and <ctgmath> do not contain any content from the C standard library and instead merely include other headers from the C++ standard library.

(C++11)(deprecated in C++17)(removed in C++20)
Simply includes the header <complex>[edit]
Simply includes the header <complex>[edit]
(C++11)(deprecated in C++17)(removed in C++20)
Simply includes the headers <complex> and <cmath>: the overloads equivalent to the contents of the C header tgmath.h are already provided by those headers[edit]
Simply includes the headers <complex> and <cmath>[edit]

Meaningless C headers

The headers <ciso646>, <cstdalign>, and <cstdbool> are meaningless in C++ because the macros they provide in C are language keywords in C++.

(removed in C++20)
Empty header. The macros that appear in iso646.h in C are keywords in C++[edit]
(C++11)(deprecated in C++17)(removed in C++20)
Defines one compatibility macro constant[edit]
(C++11)(deprecated in C++17)(removed in C++20)
Defines one compatibility macro constant[edit]
Has no effect[edit]
Defines one compatibility macro constant[edit]
Defines one compatibility macro constant[edit]

Unsupported C headers

The C headers <stdatomic.h>,(until C++23) <stdnoreturn.h>, and <threads.h> are not included in C++ and have no cxxx equivalents.

Experimental libraries

C++ TR's/TS's also define several collections of headers.

See also

C documentation for C Standard Library headers