boost :: необязательный возврат из функции

Я рассматриваю некоторый производственный код, в котором функция сообщает, что вернет boost::optional, но он просто возвращает doubleНапример,

boost::optional<double> Foo(){
double a = 1.0;
double b = 2.0;
return a + b;
}

Это приемлемый стиль / есть ли случаи, когда это небезопасно?

5

Решение

Это стиль, который мне нравится использовать. Возвращенный double будет неявно преобразован в boost :: option, который был установлен и содержит значение этого double. Я не могу вспомнить ни одного случая, когда это небезопасно. РЕДАКТИРОВАТЬ: Есть предостережения, когда тип удерживается необязательным<> Это бул — смотри документы.

Это преобразование будет использовать этот конструктор boost :: option:

boost::optional ( T const& v )

где Т в этом случае удваивается. Обратите внимание, что этот конструктор не является явным, и он был разработан именно для того, чтобы позволить код в вашем примере!

Если в другом месте функции необходимо вернуть необязательный объект, который не был установлен, вернуть boost :: option ().

Рекомендации:

http://en.cppreference.com/w/cpp/language/implicit_cast — См. Пункт 3 о возвращаемых значениях.

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]