Это стиль, который мне нравится использовать. Возвращенный double будет неявно преобразован в boost :: optional, который был установлен и содержит значение этого двойника. Я не могу придумать ни одного случая, когда это небезопасно. EDIT: существуют предостережения, когда тип, содержащийся по дополнительному адресу <>, является bool - см. Документы.
Это преобразование будет использовать этот импульс :: дополнительный конструктор:
boost::optional (T const& v)
где T в этом случае является двойным. Обратите внимание, что этот конструктор не является явным, и он был разработан именно для того, чтобы разрешить код в вашем примере!
Если в другом месте функция должна вернуть необязательный объект, который не был установлен, return boost :: optional().
Ссылка:
http://en.cppreference.com/w/cpp/language/implicit_cast - см пули 3 о возвращаемых значениях.
Как насчет передачи двойной функции, которая принимает дополнительный двойной? – frickskit
Да, это тоже прекрасно. – polkadotcadaver
Из любопытства: В чем преимущество использования этого стиля? Я имею в виду, что метод OPs 'optional' никогда не будет пустым – user463035818