Size: a a a

2021 February 12

D

Dmitriy in supapro.cxx
Выравнивание меньше alignof(char) не будет, само приведение указателя к void* безопасно
источник

AS

Anatoly Shirokov in supapro.cxx
Alexander N
Что за каст в shared_ptr
Это вопросы 10-ого порядка важности. А то что this передан под управление еще одному shared - это ужасно
источник

MK

Mikhail Kalugin in supapro.cxx
Dmitriy
Откуда UB?
Порядок байтов, правила выравнивания, даже размер integer зависят от платформы.
источник

D

Dmitriy in supapro.cxx
Mikhail Kalugin
Порядок байтов, правила выравнивания, даже размер integer зависят от платформы.
Еще раз: как это с кастом в void* связано?)
источник

MK

Mikhail Kalugin in supapro.cxx
Dmitriy
Еще раз: как это с кастом в void* связано?)
На конкретной платформе зная внутреннее устройство платформы, памяти и процессора платформы работать можно. В стандарт все случаи записать нельзя - по этому UB
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Mikhail Kalugin
Только не void* - как минимум unsigned char, UB ибо в общем случае как оно лежит в памяти решает компилятор и ни кто не гарантирует одно и то же поведение на каждой существующей в природе платформе.
Каст T* -> void* (если T является object type) никакого уб не имеет
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Impl def, если T функа
источник

MK

Mikhail Kalugin in supapro.cxx
Artöm Bakri Al-Sarmini
Каст T* -> void* (если T является object type) никакого уб не имеет
А обратно и потом ходить по структуре?
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
> потом ходить
Речь про каст
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Ходить по структуре можно через offsetof
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Mikhail Kalugin
А обратно и потом ходить по структуре?
Обратно тоже defined
источник

MK

Mikhail Kalugin in supapro.cxx
Artöm Bakri Al-Sarmini
Обратно тоже defined
Нет, в общем случае (если байты брались извне).
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Ходить по standard layout так можно примерно как ТС хотел
источник

MK

Mikhail Kalugin in supapro.cxx
Artöm Bakri Al-Sarmini
Обратно тоже defined
Каст T*->void*->T* определен в рамках одной платформы.
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Mikhail Kalugin
Нет, в общем случае (если байты брались извне).
Если байты брались извне, никакого объекта там нет и говорить не о чем
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Mikhail Kalugin
Каст T*->void*->T* определен в рамках одной платформы.
Очевидно
источник

AM

Aleksander Mironov in supapro.cxx
Panavia Tornado
Ну так ты под массив память не выдал
Вот тут поподробнее =\
источник

MK

Mikhail Kalugin in supapro.cxx
Artöm Bakri Al-Sarmini
Очевидно
Штука в том, что как оно выглядит в памяти исключительно на совести разработчика компилятора и просто так ходить по нему можно, но только если точно знаешь что делаешь. Причем ходить по void* нельзя (какой у void размер?).
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Mikhail Kalugin
Штука в том, что как оно выглядит в памяти исключительно на совести разработчика компилятора и просто так ходить по нему можно, но только если точно знаешь что делаешь. Причем ходить по void* нельзя (какой у void размер?).
Про ходьбу по воид никто не говорил. Никто не говорил, что прибавив N байт к началу ТС получит нужное поле на всех платформах
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Для щупанья байт в плюсах достаточно более-менее платформонещависисых инструментов
источник