Кресты / Говнокод #23352 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
bool valueToString(std::string_view str, float& value) try {
    const auto end = std::numeric_limits<std::size_t>::max();
    const float parsed = std::stof(str.data(), &end);
    if (end != str.size())
        return false;
    value = parsed;
    return true;
} catch (...) {
    return false;
}

string_view пирформанс! Спойлер: да, там std::stof

Запостил: Elvenfighter Elvenfighter, (Updated )

Комментарии (7) RSS

  • можно долго критиковать этот кусок, но разве это не самый быстрый стандарный способ парсинга строки во float (при валидных данных офк)?
    Ответить
    • Подход вполне адекватный. Просто std::stof принимает только *const std::string&* (даже в С++17). Вот кто-то "проапгрейдил" "суб-оптимальный" аргумент данной функции с const std::string& до кошерного string_view не задумываясь над своими действиями.
      Ответить
      • меня больше поразило что оно вообще скомпилилось. Там указатель на const size_t передается в мутирующую функцию. После этого даже лишняя аллокация памяти не имеет значения.
        Ответить
  • Ох, только заметил, я скопипастил название другой (т.е. "парной") функции что была рядом. На самом деле эта функция называется "stringToValue"
    Ответить
  • Как называется паттерн
    func(...) try {
    } catch(...) {
      return false;
    }

    ?
    Ответить
    • "nahuj exceptions wrapper", популярен в среде хуй знает кого и гос. контор
      Ответить

Добавить комментарий

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8