`reinterpret_cast` между несвязанными структурамиC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 `reinterpret_cast` между несвязанными структурами

Сообщение Anonymous »

Предположим, у меня есть две несвязанные структуры A и B, которые имеют одинаковые элементы данных и все такое. Проверено с помощью такого статического утверждения:
template
constexpr bool CheckCompatibility() noexcept
{
static_assert(sizeof(From) == sizeof(To));
static_assert(alignof(From) == alignof(To));

static_assert(std::is_standard_layout_v);
static_assert(std::is_standard_layout_v);

static_assert(std::is_trivially_destructible_v);
static_assert(std::is_trivially_destructible_v);

static_assert(std::is_trivially_copyable_v);
static_assert(std::is_trivially_copyable_v);

return true;
}

Это будет разрешено или UB?
struct A {
int x;
float y;
double z;
int arr[3];
};

struct B {
int x;
float y;
double z;
int arr[3];
};

A* a = new A();
B* b = reinterpret_cast(a);

// Using a & b (with proper synchronization and so on)


Подробнее здесь: https://stackoverflow.com/questions/798 ... ed-structs
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»