Почему std :: option <T>:: value () не является бесплатной функцией? - PullRequest
1 голос
/ 28 апреля 2020

Насколько я знаю, рекомендуется использовать функции, не являющиеся членами, не являющимися членами, когда это возможно, поскольку это отделяет алгоритмы, работающие с классом, от его частных полей. Используя эту логику c, мы, вероятно, реализовали бы std::optional<T>::value() как что-то вроде

template<typename T> T& value(std::optional<T>& optional) {
  if (optional.has_value()) {
    return *optional;
  } else {
    throw std::bad_optional_access("empty optional");
  }
}

Однако value() является функцией-членом. Почему? Тот же вопрос можно применить к std::optional<T>::value_or().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...