Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Этот тип является типом-значением (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