std::optional(3)
π std::optional β the C++ Standard Library page, but make it a vibe β¨
okay so bestie, this is the manual page for std::optional(3) and it is literally the βmaybe thereβs a value, maybe there isnβtβ queen of C++17. no cap, sheβs iconic. π«Ά
πΈ NAME
std::optional β std::optional (yes bestie, thatβs what the page says; the name is the name π
)
π« Synopsis
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. π (like, sheβs giving object, not pointer, periodt.)
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
Tor 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_tor an optional object that does not contain a value. - The member function
reset()is called.
There are no optional references, functions, arrays, or cv void; a program is ill-formed if it instantiates an optional with such a type. 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. π¨
𧬠Template parameters
Tβ the type of the value to manage initialization state for. The type must meet the requirements ofDestructible(in particular, array and reference types are not allowed). π
π§ Member types
value_typeβT
π οΈ Member functions
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)
π Observers
operator->β accesses the contained value (public member function)operator*β accesses the contained value (public member function)operator boolβ checks whether the object contains a value (public member function)has_valueβ checks whether the object contains a 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(C++23)β returns the result of the given function on the contained value if it exists, or an empty optional otherwise (public member function)transform(C++23)β returns an optional containing the transformed contained value if it exists, or an empty optional otherwise (public member function)or_else(C++23)β returns the optional itself if it contains a value, or the result of the given function otherwise (public member function)
π§ Modifiers
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)
π«± Non-member functions
operator==β compares optional objects (C++17) (function template)operator!=β compares optional objects (C++17) (function template)operator<β compares optional objects (C++17) (function template)operator<=β compares optional objects (C++17) (function template)operator>β compares optional objects (C++17) (function template)operator>=β compares optional objects (C++17) (function template)operator<=>β compares optional objects (C++20) (function template)make_optionalβ creates an optional object (C++17) (function template)std::swap(std::optional)β specializes thestd::swapalgorithm (C++17) (function template)
π§° Helper classes
std::hash<std::optional>β hash support forstd::optional(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 doesnβt contain a value (C++17) (class)
π§ Helpers
nulloptβ an object of typenullopt_t(C++17) (constant)in_place,in_place_type,in_place_indexβ in-place construction tag (tag) (C++17)in_place_t,in_place_type_t,in_place_index_tβ in-place construction tag (tag) (C++17)
π§ Deduction guides
(this section is literally just the heading in the original β no extra bullet points listed, so weβre not inventing any π )
π Notes
Feature-test macro, value, standard, and feature:
__cpp_lib_optional201606L(C++17) βstd::optional__cpp_lib_optional202106L(C++20) β Fullyconstexpr(DR)__cpp_lib_optional202110L(C++23) β Monadic operations
π Example
Run this code, bestie:
// Run this code
#include <iostream>
#include <optional>
#include <string>
// 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;
}
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';
}
Output:
create(false) returned empty
create2(true) returned Godzilla
π See also
variantβ a type-safe discriminated union (C++17) (class template)anyβ objects that hold instances of anyCopyConstructibletype (C++17) (class)
okay bye bestie π«Ά this page came from http://cppreference.com, version/date 2024.06.10 β now go make an optional that slays π
β¨
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms