std::experimental::optional
After reviewing national body comments to N3690, this library component was voted out from C++14 working paper into a separate Technical Specification. It is not a part of the draft C++14 as of n3797. |
This is work in progress, there may be inaccuracies |
Defined in header
<experimental/optional>
|
||
template< class T >
class optional; |
(library fundamentals TS) | |
The class template std::experimental::optional
manages an optional contained value, i.e. a value that semantically may not be present.
A common use case for optional
is the return value of a function that may fail. As opposed to other approaches, such as std::pair<T,bool>, optional
handles expensive to construct objects well and is more readable, as the intent is expressed explicitly.
The value is guaranteed to be allocated within the optional
object itself, i.e. no dynamic memory allocation ever takes place. Thus, an optional
object models an object, not a pointer, even though the operator*() and operator->() are defined.
The value inside an optional
object may be in either an initialized or uninitialized state. An optional
object with a value in initialized state is called engaged, whereas if the value is in uninitialized state, the object is called disengaged.
The optional
object is engaged on the following conditions:
- The object is initialized with a value of type
T
- The object is assigned an engaged
optional
.
The object is disengaged on the following conditions:
- The object is default-initialized.
- The object is initialized with a value of std::experimental::nullopt_t or a disengaged
optional
object.
- The object is assigned a value of std::experimental::nullopt_t or a disengaged
optional
.
Contents |
[edit] Template parameters
T | - | the type of the value to manage initialization state for. The type must meet the requirements of Destructible
|
[edit] Member types
Member type | Definition |
value_type
|
T
|
[edit] Member functions
constructs the optional object (public member function) |
|
if engaged, destroys the contained value (public member function) |
|
assigns contents (public member function) |
|
Observers |
|
accesses the contained value (public member function) |
|
checks whether the object is in engaged state (public member function) |
|
returns the contained value (public member function) |
|
returns the contained value if engaged, another value otherwise (public member function) |
|
Modifiers |
|
exchanges the contents (public member function) |
|
constructs the contained value in-place (public member function) |
[edit] Non-member functions
compares optional objects (function template) |
|
creates an optional object (function template) |
|
specializes the std::swap algorithm (function) |
[edit] Helper classes
specializes the std::hash algorithm (class template specialization) |