два int64_t
Если сделать
std::vector<int64_t> vec;
vec.resize(2);
std::memcpy(vec.data(), buf, 16);
Это будет работать как ожидалось и создаст два инта в соответствии со стрикт алиасингом?..
сам сейчас с сокетами похоже копирую из потока
Если гарантируешь CHAR_BIT == 8, то не вижу причин, почему нет. Хотя для CHAR_BIT != 8 вряд ли будут доступны int*_t типы. Хотя могут в теории. В общем если сделать s/16/sizeof(int64_t)*2/ будет ближе к истине. :)
На самом деле у меня гарантированно инты в буфере восьмибитные и это не совсем массив, ну а у себя я как-то гарантирую, что байт восемь бит, да :)
Сами int64_t создаются на resize ещё, и они trivially copyable. Так что мне видится, что всё тут отлично.
я думаю, что да, если 20 стандарт или новее For each operation that is specified as implicitly creating objects, that operation implicitly creates and starts the lifetime of zero or more objects of implicit-lifetime types in its specified region of storage if doing so would result in the program having defined behavior. http://eel.is/c++draft/intro.object#10.sentence-2
Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
Да, но тут ведь объекты уже созданы, поэтому должно работать и до С++20, верно?
а что может пойти не так?
resize при увеличении добавляет default-inserted элементы, что значит allocator_traits::construct, что значит placement-new, что начинает время жизни
Там больше вопросов к буферу, валидно ли в нём присутствие object representation int64_t до 20.
Обсуждают сегодня