Хабр Курсы для всех
РЕКЛАМА
Большая витрина: от крупнейших школ до частных авторов. Сравнивайте по цене, длительности, формату и выбирайте самый подходящий курс!
Этот тип является типом-значением (value-type) (таким образом, вы можете копировать его).
Поэтому, если он вам и правда нужен, возможно лучше использовать настоящий троичный тип — std::tribool.
When calling a function (whether or not the function is inline), every value computation and side effect associated with any argument expression, or with the postfix expression designating the called function, is sequenced before execution of every expression or statement in the body of the called function.Во втором случае (value_or(func())) мы имеем вызов функции value_or, которой передается параметр func(). Этот параметр будет вычислен до выполнения команд функции value_or. В первом же случае передающийся аргумент — это указатель на функцию, и сам вызов функции может и не происходить.
Например, если у какого-либо ресурса нет конструктора по умолчанию и конструирование объекта занимает довольно длительное время. Тогда вы можете объявить std::optional, и передать этот объект дальше системе, а выполнять загрузку уже позднее по необходимости.
Не очень удачный пример использования. std::promise будет лучше отображать состояние обьекта, который когда-то будет создан.
Использование std::optional в С++17