Я рассматриваю некоторый производственный код, в котором функция сообщает, что вернет boost::optional
, но он просто возвращает double
Например,
boost::optional<double> Foo(){
double a = 1.0;
double b = 2.0;
return a + b;
}
Это приемлемый стиль / есть ли случаи, когда это небезопасно?
Это стиль, который мне нравится использовать. Возвращенный double будет неявно преобразован в boost :: option, который был установлен и содержит значение этого double. Я не могу вспомнить ни одного случая, когда это небезопасно. РЕДАКТИРОВАТЬ: Есть предостережения, когда тип удерживается необязательным<> Это бул — смотри документы.
Это преобразование будет использовать этот конструктор boost :: option:
boost::optional ( T const& v )
где Т в этом случае удваивается. Обратите внимание, что этот конструктор не является явным, и он был разработан именно для того, чтобы позволить код в вашем примере!
Если в другом месте функции необходимо вернуть необязательный объект, который не был установлен, вернуть boost :: option ().
Рекомендации:
http://en.cppreference.com/w/cpp/language/implicit_cast — См. Пункт 3 о возвращаемых значениях.
Других решений пока нет …