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 ответов

15 просмотров

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

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, пожалуй, можно, но это же...

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

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

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

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

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

Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Коллеги, добрый вечер. Создаю коллекцию от TFPGMap, ключ - перечисление, значение - целое. Нужно отсортировать коллекцию по значению. Как это можно сделать?
Kirill Filippenok
11
Скажи а ты когда этот канал создавал ты уже дельфи не любил, или это со временем пришло?
Роман Лях (rgreat)
18
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Всем привет! Использую кастомное модальное диалоговое окошко, все по классике - mrOK, mrCancel как ModalResult. Однако есть нюанс - в главной форме есть универсальный обработч...
Олег Гранишевский
20
Карта сайта