Size: a a a

2020 May 28

D

Dmitry in pro.cxx
все добра!
кто-нибудь может сказать, следующий простейший пример всё таки UB или не UB:
    struct {int i;float f;} s;
   std::ifsream f("file.bin", std::ios::binary);
   f.read(reinterpret_cast<char*>&s, sizeof(s));
   std::cout << s.f;

нигде толком не могу точный ответ найти, все по-разному говорят
источник

AB

Alex Belov in pro.cxx
не UB
источник

v

vehlwn in pro.cxx
Dmitry
все добра!
кто-нибудь может сказать, следующий простейший пример всё таки UB или не UB:
    struct {int i;float f;} s;
   std::ifsream f("file.bin", std::ios::binary);
   f.read(reinterpret_cast<char*>&s, sizeof(s));
   std::cout << s.f;

нигде толком не могу точный ответ найти, все по-разному говорят
Уб. Ты не можешь просто взять любой файл и бинарно записать его в структуру.
источник

AB

Alex Belov in pro.cxx
могу если до этого такую структуру в этот файл записал
источник

v

vehlwn in pro.cxx
Гугли нлохман жсон. Или законани его в конан центре.
C:\Users\vehlwn>conan search nlohmann_json -r=conan-center
Existing package recipes:

nlohmann_json/3.7.0
nlohmann_json/3.7.3
источник

v

vehlwn in pro.cxx
Alex Belov
могу если до этого такую структуру в этот файл записал
Файл создан на одном компе а открывается на другом? Файл создан и открывается на одном компе? Чтобы не было этих глупых вопросов используй нормальную сереализацию, а не мемцпу.
источник

AB

Alex Belov in pro.cxx
а никто не говорил  что это кроссплатформенное решение
источник

v

vehlwn in pro.cxx
Alex Belov
а никто не говорил  что это кроссплатформенное решение
А зачем делать не кроссплатформанно?
источник

AB

Alex Belov in pro.cxx
что б было быстро
источник

AB

Alex Belov in pro.cxx
в качестве  варианта хранения локального кеша - норм вариант
источник

D

Dmitry in pro.cxx
> Чтобы не было этих глупых вопросов используй нормальную сереализацию
файл уже есть, я не могу поменять его формат, мне нужно его парсить
каким способом легально в плюсах это можно сделать?

пересмотрел 25 лекций по сериализации, type punning, на ютубе по часу, стандарт читал до изнеможения, cppreference наизусть выучил, на stackoverflow все существующие вопросы по этой теме просмотрел, но ответа нигде нет
у всех абсолютно разные мнения, чёрт возьми
источник

D

Dmitry in pro.cxx
просто, чёрт побери, прочитать файл и всё
источник

D

Dmitry in pro.cxx
на С++ это UB всегда что ли?
источник

АК

Александр Караев... in pro.cxx
Dmitry
> Чтобы не было этих глупых вопросов используй нормальную сереализацию
файл уже есть, я не могу поменять его формат, мне нужно его парсить
каким способом легально в плюсах это можно сделать?

пересмотрел 25 лекций по сериализации, type punning, на ютубе по часу, стандарт читал до изнеможения, cppreference наизусть выучил, на stackoverflow все существующие вопросы по этой теме просмотрел, но ответа нигде нет
у всех абсолютно разные мнения, чёрт возьми
насчёт fread не уверен, а вот считать файл в char[] буфер и из него memcpy в trivially_copyable структуру - норм
источник

AS

Anatoly Shirokov in pro.cxx
давай эмоции уберем, и в сухом остатке ты сформируешь проблему
источник

D

Dmitry in pro.cxx
структуры у меня и так все trivially_copyable которые я читаю из файла
источник

D

Dmitry in pro.cxx
на cppreference указано
Objects of trivially-copyable types are the only C++ objects that may be safely copied with std::memcpy or serialized to/from binary files with std::ofstream::write()/std::ifstream::read().
источник

D

Dmitry in pro.cxx
т.е. read и write упоминаются
источник

АК

Александр Караев... in pro.cxx
а ты доверяешь тому, кто это писал? =)
источник

D

Dmitry in pro.cxx
это значит, что можно напрямую их читать?
источник