Я использовал экспериментальное приложение std::optional
какое-то время, и мне было интересно, когда-либо рассматривался такой метод, как std::optional<T>::value_or_default
. Это даст вам значение, если включено, или по умолчанию T
, если нет. Да, легко написать std::optional::value_or(T { })
, но иногда, если T
имеет кучу символов, я не думаю, что это так же ясно, как писать value_or_default
.std :: optional :: value_or_default и std :: optional :: is_engaged
Также такие документы, как n3672, действительно не дают веской причины, почему такой метод, как std:optional::is_engaged
, не был включен. Я понимаю, почему nullopt
полезен в некоторых случаях и был включен, но я думаю, что std::optional::is_engaged
понятнее в простых выражениях.
«Усиление: необязательно» есть? –
Кроме того, тестирование того, является ли опциональное, содержит значение, легко выполняется с использованием контекстного преобразования в 'bool', нет необходимости в' is_engaged' (и зачем использовать этот термин? В документации отсутствует нигде. Параллельные типы данных в других рамках используют " имеет значение ".) –
' value_or_emplace' выглядит менее особым случаем, чем '_or_default'. Я утверждаю, что 'value_or' должен быть периодом' value_or_emplace' (только при необходимости создавайте 'или'). И 'value_or()' будет оператором, который вы хотите. – Yakk