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

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    struct file_id
    {
        uint64_t        persistent;
        uint64_t        volatile_;
    
        static const size_t RAW_LENGTH  = 16;
        operator std::string() const
        { return std::string(reinterpret_cast<const char*>(&persistent), RAW_LENGTH); }
    
        // Операторы для использования file_id в качестве ключа map и 
        // unordered_map
        struct hash
        {
            std::size_t operator()(const ntdec_smb2_file_id& file_id) const
            {
                std::string s_file_id = file_id;
                std::hash<std::string> hasher;
                return hasher(s_file_id);
            }
        };
    
        bool operator == (const ntdec_smb2_file_id& other)
        {
            return std::string(*this) == std::string(other);
        }
    
        bool operator < (const ntdec_smb2_file_id& other)
        {
            return std::string(*this) < std::string(other);
        }
    
        bool operator > (const ntdec_smb2_file_id& other)
        {
            return std::string(*this) > std::string(other);
        }
    };

    operator std::string тоже UB?

    Запостил: YpaHeLI_, 24 Августа 2021

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

    • Это генератор случайного названия для файла? В PHP тебе хватило бы простого uniqid().
      Ответить
    • Да тут и без UB и завязки на порядок байтов какое-то минное поле. И не факт, что огороженное.
      Ответить
    • Ты реинтерпретер кастишь указатель на uint64_t в указатель на char?
      Тебе скучно жить?
      Ответить
      • Причём там этот указатель сразу джва поля покрывает.
        Ответить
    • Я достаточно долгое время живу за рубежом, поэтому как-то проще уделять время своим шалостям. Никто особо не третирует за вопрос бисексуальности, хотя и в самой моей бисексуальности есть тонкости.
      Ответить
    • > operator std::string тоже UB?
      Да.
      Ответить
      • Из-за reinterpret_cast? А правильно будет по байтикам копировать?
        Ответить
        • Правильно будет не ебать мозг и просто сравнить... Но да, мемсру должен проканать.
          Ответить
          • > мемсру
            Всё-таки велик и могуч.

            Каждому явлению, предмету и даже сишной функции даёт максимально чуткое оперделение.
            Ответить

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