std::optional в C++17 используется для представления значения, которое может присутствовать или отсутствовать.
Основные применения:
std::optional<T>, где T — тип успешного результата. Если операция успешна, optional содержит значение; если нет – он пуст.
cpp
std::optional<T> в качестве параметра, указывая, что значение этого параметра может быть предоставлено или нет.
cpp
cpp
nullptr: std::optional явно выражает семантику опционального значения, в то время как указатель может использоваться для владения или ссылки на объект, а nullptr – лишь один из случаев. std::optional также избегает накладных расходов, связанных с динамическим выделением памяти, если объект создается прямо внутри него.Ключевые особенности:
.value()) могут генерировать исключение, если значение отсутствует, предотвращая неопределенное поведение. Безопаснее использовать методы .has_value() или операторы * и -> после проверки.optional (малое оптимизирование на уровне стека/владения) или рядом с ним, без накладных расходов на динамическое выделение памяти для самого значения, если только оно не является очень большим объектом или не требуется его полиморфное поведение.Пример использования:
cpp