| Technical Specification | ||||
| Filesystem library(filesystem TS) | ||||
| Library fundamentals(library fundamentals TS) | ||||
| Library fundamentals 2(library fundamentals TS v2) | ||||
| Library fundamentals 3(library fundamentals TS v3) | ||||
| Extensions for parallelism(parallelism TS) | ||||
| Extensions for parallelism 2(parallelism TS v2) | ||||
| Extensions for concurrency(concurrency TS) | ||||
| Extensions for concurrency 2(concurrency TS v2) | ||||
| Concepts(concepts TS) | ||||
| Ranges(ranges TS) | ||||
| Reflection(reflection TS) | ||||
| Mathematical special functions(special functions TR) | ||||
| Experimental Non-TS | ||||
| Pattern Matching | ||||
| Linear Algebra | ||||
| std::execution | ||||
| Contracts | ||||
| 2D Graphics |
experimental::optional | ||||
| Type-erased and polymorphic allocators | ||||
| Variable templates for type traits |
| Member functions | ||||
| Observers | ||||
| Modifiers | ||||
| Non-member functions | ||||
| Helper classes | ||||
| Helper objects | ||||
![]() | Merged into ISO C++ The functionality described on this page was merged into the mainline ISO C++ standard as of 3/2016, seestd::optional(since C++17) |
Defined in header <experimental/optional> | ||
template<class T> class optional; | (library fundamentals TS) | |
The class templatestd::experimental::optional manages anoptional contained value, i.e. a value that may or may not be present.
A common use case foroptional is the return value of a function that may fail. As opposed to other approaches, such asstd::pair<T,bool>,optional handles expensive to construct objects well and is more readable, as the intent is expressed explicitly.
Any instance ofoptional<T> at any given point in time eithercontains a value ordoes not contain a value.
If anoptional<T>contains a value, the value is guaranteed to be allocated as part of theoptional object footprint, i.e. no dynamic memory allocation ever takes place. Thus, anoptional object models an object, not a pointer, even though theoperator*() andoperator->() are defined.
When an object of type optional<T> iscontextually converted to bool, the conversion returnstrue if the objectcontains a value andfalse if itdoes not contain a value.
Theoptional objectcontains a value in the following conditions:
T.optional thatcontains a value.The objectdoes not contain a value in the following conditions:
optional object thatdoes not contain a value.optional thatdoes not contain a value.Contents |
| T | - | the type of the value to manage initialization state for. The type must meet the requirements ofDestructible. |
| Member type | Definition |
value_type | T |
| constructs the optional object (public member function)[edit] | |
| destroys the contained value, if there is one (public member function)[edit] | |
| assigns contents (public member function)[edit] | |
Observers | |
| accesses the contained value (public member function)[edit] | |
| checks whether the object contains a value (public member function)[edit] | |
| returns the contained value (public member function)[edit] | |
| returns the contained value if available, another value otherwise (public member function)[edit] | |
Modifiers | |
| exchanges the contents (public member function)[edit] | |
| constructs the contained value in-place (public member function)[edit] | |
| Member name | Definition |
val(private) | pointer to the contained value (which points at a data member of the same object), the name is for exposition only |
comparesoptional objects(function template)[edit] | |
creates anoptional object(function template)[edit] | |
| specializes thestd::swap algorithm (function)[edit] |
| specializes thestd::hash algorithm (class template specialization)[edit] | |
(library fundamentals TS) | indicator of optional type with uninitialized state (class)[edit] |
(library fundamentals TS) | disambiguation tag type for in-place construction of optional types (class)[edit] |
(library fundamentals TS) | exception indicating checked access to an optional that doesn't contain a value (class)[edit] |
(library fundamentals TS) | an object of typenullopt_t(function)[edit] |
(library fundamentals TS) | an object of typestd::experimental::in_place_t (function)[edit] |