GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::optional(3) C++ Standard Libary std::optional(3)

std::optional - std::optional


Defined in header <optional>
template< class T > (since C++17)
class optional;


The class template std::optional manages an optional contained value, i.e. a value
that may or 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.


Any instance of optional<T> at any given point in time either contains a value or
does not contain a value.


If an optional<T> contains a value, the value is guaranteed to be allocated as part
of the optional object footprint, i.e. no dynamic memory allocation ever takes
place. Thus, an optional object models an object, not a pointer, even though
operator*() and operator->() are defined.


When an object of type optional<T> is contextually converted to bool, the conversion
returns true if the object contains a value and false if it does not contain a
value.


The optional object contains a value in the following conditions:


* The object is initialized with/assigned from a value of type T or another
optional that contains a value.


The object does not contain a value in the following conditions:


* The object is default-initialized.
* The object is initialized with/assigned from a value of type std::nullopt_t or
an optional object that does not contain a value.
* The member function reset() is called.


There are no optional references; a program is ill-formed if it instantiates an
optional with a reference type. Alternatively, an optional of a
std::reference_wrapper of type T may be used to hold a reference. In addition, a
program is ill-formed if it instantiates an optional with the (possibly
cv-qualified) tag types std::nullopt_t or std::in_place_t.


the type of the value to manage initialization state for. The type must meet the
T - requirements of Destructible (in particular, array and reference types are not
allowed).


Member type Definition
value_type T


constructor constructs the optional object
(public member function)
destructor destroys the contained value, if there is one
(public member function)
operator= assigns contents
(public member function)


operator-> accesses the contained value
operator* (public member function)
operator bool checks whether the object contains a value
has_value (public member function)
value returns the contained value
(public member function)
value_or returns the contained value if available, another value otherwise
(public member function)
Monadic operations
and_then returns the result of the given function on the contained value if it
(C++23) exists, or an empty optional otherwise
(public member function)
transform returns an optional containing the transformed contained value if it
(C++23) exists, or an empty optional otherwise
(public member function)
or_else returns the optional itself if it contains a value, or the result of
(C++23) the given function otherwise
(public member function)


swap exchanges the contents
(public member function)
reset destroys any contained value
(public member function)
emplace constructs the contained value in-place
(public member function)


operator==
operator!=
operator<
operator<=
operator>
operator>=
operator<=> compares optional objects
(C++17) (function template)
(C++17)
(C++17)
(C++17)
(C++17)
(C++17)
(C++20)
make_optional creates an optional object
(C++17) (function template)
std::swap(std::optional) specializes the std::swap algorithm
(C++17) (function template)


std::hash<std::optional> specializes the std::hash algorithm
(C++17) (class template specialization)
nullopt_t indicator of optional type with uninitialized state
(C++17) (class)
bad_optional_access exception indicating checked access to an optional that
(C++17) doesn't contain a value
(class)


Helpers


nullopt an object of type nullopt_t
(C++17) (constant)
in_place
in_place_type
in_place_index in-place construction tag
in_place_t (class template)
in_place_type_t
in_place_index_t
(C++17)


Deduction guides


Feature-test macro: __cpp_lib_optional

// Run this code


#include <string>
#include <functional>
#include <iostream>
#include <optional>


// optional can be used as the return type of a factory that may fail
std::optional<std::string> create(bool b) {
if (b)
return "Godzilla";
return {};
}


// std::nullopt can be used to create any (empty) std::optional
auto create2(bool b) {
return b ? std::optional<std::string>{"Godzilla"} : std::nullopt;
}


// std::reference_wrapper may be used to return a reference
auto create_ref(bool b) {
static std::string value = "Godzilla";
return b ? std::optional<std::reference_wrapper<std::string>>{value}
: std::nullopt;
}


int main()
{
std::cout << "create(false) returned "
<< create(false).value_or("empty") << '\n';


// optional-returning factory functions are usable as conditions of while and if
if (auto str = create2(true)) {
std::cout << "create2(true) returned " << *str << '\n';
}


if (auto str = create_ref(true)) {
// using get() to access the reference_wrapper's value
std::cout << "create_ref(true) returned " << str->get() << '\n';
str->get() = "Mothra";
std::cout << "modifying it changed it to " << str->get() << '\n';
}
}


create(false) returned empty
create2(true) returned Godzilla
create_ref(true) returned Godzilla
modifying it changed it to Mothra


variant a type-safe discriminated union
(C++17) (class template)
any Objects that hold instances of any CopyConstructible type.
(C++17) (class)

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.