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

2 просмотра

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

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

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

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

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

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

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

Такс, блин, таки кто-то знает, каким образом работают макросы stdin/stdout/stderr? Я влез в stdio.h, там определения нет, отладил через асмокод - вызывается функция со странны...
The Bird of Hermes
18
Всем привет, на линуксе лучше на fasm или nasm учиться писать для начала ?
meszjol
14
Если у меня есть такой класс: Object = {} function Object:new(a_name, a_transform, a_color, a_mesh, a_material, a_shader, a_textures) local private = {} private.n...
Cuarno Vile
4
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
было так ;void set_http_ver(RESPD* ptr, char* version, uint32_t length) // example: 'RTSP/1.1 ' set_http_ver: mov eax, [esp + 4] mov ecx, [esp + 8] ...
Mixail Frolov
5
Гайз, кто-нибудь пробовал запустить probe-rs под камень, которого нет в probe-rs? Мб есть какой-нибудь пример у кого... Через target-gen попробовал сгенерировать chip-descript...
Максим Смирнов
2
зачем же переименовывать ? чтобы кол-во участников возросло или вдруг IBM от этого снова на свифте начнет кодить ? Я не понимаю что страшного в том что свифт гавно, если это т...
Oleh Nerzh
10
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
здравствуйте. совершаю вот такую вещь: strcpy(line, (char)current_number); где current number — неподписанный шорт, line — массив чаров. ругань следующая: main.c:29:30: error...
Roberto's Ширгозиев
13
Карта сайта