Класс optional
Класс optional представляет собой контейнер,
который может хранить значение некоторого типа
или находиться в пустом состоянии. Это удобная
альтернатива использованию указателей и специальных
значений вроде -1 для обозначения отсутствия
результата. В параметр шаблона мы передаем тип
значения, которое будет храниться внутри контейнера.
Синтаксис
#include <optional>
std::optional<T> opt;
std::optional<T> opt(value);
Пример
Давайте создадим объект optional без значения
и проверим, содержит ли он что-либо:
#include <iostream>
#include <optional>
using namespace std;
int main()
{
optional<int> opt;
if (opt.has_value()) {
cout << "Has value" << endl;
} else {
cout << "Empty" << endl;
}
return 0;
}
Результат выполнения кода:
"Empty"
Пример
Давайте создадим объект optional со значением
123 и выведем его на экран:
#include <iostream>
#include <optional>
using namespace std;
int main()
{
optional<int> opt = 123;
if (opt.has_value()) {
cout << opt.value() << endl;
}
return 0;
}
Результат выполнения кода:
123
Пример
Давайте воспользуемся методом value_or,
чтобы получить значение по умолчанию, если
контейнер пуст:
#include <iostream>
#include <optional>
using namespace std;
int main()
{
optional<int> opt;
cout << opt.value_or(0) << endl;
return 0;
}
Результат выполнения кода:
0