170 похожих чатов

Можно ли так делать? struct Point { int x; int y;

}
struct Point2 { int x; int y; }

Point p { .x = 11, .y = 22 };
Point2* p2 = reinterpret_cast<Point2*>(&p); // ???
Point2 p2 = reinterpret_cast<Point2>(p); // а так???

34 ответов

18 просмотров

Первое можно, только если не разыменовывать потом, второе нет

Liber Azerate
Первое можно, только если не разыменовывать потом,...

Таки хочется как раз разыменовать, и достать оттуда x и у. Неужели единственный вариант - это пересоздавать структуру?

второе это однозначно некорректный код, который не должен (и не будет) компилироваться

Нет, нельзя

Самое главное — это ни на фиг не нужно!

𝙽𝚒𝚌𝚔 𝙻𝚒𝚗𝚔𝚎𝚛
Таки хочется как раз разыменовать, и достать оттуд...

смотрите в пример реализации bit_cast, если 20 стандарт недоступен

Ilya Zviagin
Самое главное — это ни на фиг не нужно!

Нужно, уж извини. Я знаю, что пересоздавать надёжно, но я неспроста пытаюсь избежать этого, хехе.

Vlad
смотрите в пример реализации bit_cast, если 20 ста...

и чем поможет такая реализация bit_cast? `template <class _To, class _From, enable_if_t<conjunction_v<bool_constant<sizeof(_To) == sizeof(_From)>, is_trivially_copyable<_To>, is_trivially_copyable<_From>>, int> = 0> _NODISCARD constexpr _To bit_cast(const _From& _Val) noexcept { return __builtin_bit_cast(_To, _Val); } `

Sergey Sobolev
почему?

а кто гарантирует эквивалентность бинарного представления двух этих структур? )

Danya🔥
Ссылку можно было и открыть

на cppref наверняка memcpy нарисован

Андрей Руссков
а кто гарантирует эквивалентность бинарного предст...

Ну они одинаковые. Один компилятор. Одна ось. Одна битность. Или нужно, чтобы они в одном файле вообще лежали?

Андрей Руссков
а кто гарантирует эквивалентность бинарного предст...

действительно, кто гарантирует что все int одинаковые ... 🙊

𝙽𝚒𝚌𝚔 𝙻𝚒𝚗𝚔𝚎𝚛
Ну они одинаковые. Один компилятор. Одна ось. Одна...

нужно чтобы стандарт гарантировал что они одинаковые, а стандарт этого не гарантирует )

Андрей Руссков
а кто гарантирует эквивалентность бинарного предст...

Стандарт такого не требует. Если размеры одинаковы, они тривиально копируемы и внутри те же объекты, то можно

Андрей Руссков
это в сишном стандарте

В сишном стандарте есть bit_cast?

Андрей Руссков
а кто гарантирует эквивалентность бинарного предст...

не хватает оговорки на разные версии компилятора

Sergey Sobolev
тогда нафига оно надо этот bit_cast - непонятно)

чтобы в данном случаем успокоить ревнителей чистоты С++ и замедлить компиляцию :)

Liber Azerate
В сишном стандарте есть bit_cast?

нет, в сишном стандарте есть понятие struct layout compatibility

Андрей Руссков
нет, в сишном стандарте есть понятие struct layout...

Ну, как видите, в С++ таких требований нет. На уровне языка представление объектов одинаково, констрейнты выполняются, значит можно

В общем, через bit_cast, пожалуй, можно, но это же всё равно копия, не проще ли пересоздать?

Liber Azerate
В общем, через bit_cast, пожалуй, можно, но это же...

Идея была в том, чтобы старую структуру интерпретировать как новую. Новая имела бы в точности такие же поля и опции выравнивания, но лежала бы в нужном классе, к которому имеют доступ другие классы.

𝙽𝚒𝚌𝚔 𝙻𝚒𝚗𝚔𝚎𝚛
Идея была в том, чтобы старую структуру интерпрети...

Просто интерпретировать нельзя. Только скопировать(особым образом), либо создавать новый объект

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта