1. C++ / Говнокод #23352

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 22 Сентября 2017

    Комментарии (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", популярен в среде хуй знает кого и гос. контор
        Ответить

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