Size: a a a

2020 March 06

P

Pepe 🐸 in pro.cxx
Pepe 🐸
нет, тайп punning это и есть aliasing
когда ты создаешь alias для другого типа. Этот запрет появился изза компайлерных оптимизаций и единственный разрешенный алиас для типов это char, unsigned char и byte
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Pepe 🐸
нет, тайп punning это и есть aliasing
Невозможность паннинга юнионами объясняется лайфтаймами прежде всего
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Pepe 🐸
когда ты создаешь alias для другого типа. Этот запрет появился изза компайлерных оптимизаций и единственный разрешенный алиас для типов это char, unsigned char и byte
type alias (typedef) и aliasing это 2 разные вещи
источник

P

Pepe 🐸 in pro.cxx
Artöm Bakri Al-Sarmini
type alias (typedef) и aliasing это 2 разные вещи
я понимаю, я не про тайпдеф сейчас
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Алиасинг не про алиасы
источник

AS

Anatoly Shirokov in pro.cxx
Flower Surgeon
не совсем понятно зачем там такой паддинг. Поизучаю матчасть, пожалуй.
источник

P

Pepe 🐸 in pro.cxx
Artöm Bakri Al-Sarmini
Алиасинг не про алиасы
цитирую с сппреференс что я имею ввиду:
Type aliasing
Whenever an attempt is made to read or modify the stored value of an object of type DynamicType through a glvalue of type AliasedType, the behavior is undefined unless one of the following is true:
источник

P

Pepe 🐸 in pro.cxx
Pepe 🐸
цитирую с сппреференс что я имею ввиду:
Type aliasing
Whenever an attempt is made to read or modify the stored value of an object of type DynamicType through a glvalue of type AliasedType, the behavior is undefined unless one of the following is true:
источник

P

Pepe 🐸 in pro.cxx
char* a = reinterpret_cast<char*>(b) -- тип char алиасит тип который имеет b
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Pepe 🐸
char* a = reinterpret_cast<char*>(b) -- тип char алиасит тип который имеет b
И?
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Приведи пример юниона, в котором типы алиасятся, но не входят в common initial sequence
источник

P

Pepe 🐸 in pro.cxx
Artöm Bakri Al-Sarmini
И?
и вопрос в том разрешено ли, если грубо говоря есть class A{ int a}  и class B {int b} кастить один к другому. Потому что фактически это один тип, но как компайлер о них должен думать по стандарту? (то что как минимум в 99% это работать будет и так понятно)
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Pepe 🐸
и вопрос в том разрешено ли, если грубо говоря есть class A{ int a}  и class B {int b} кастить один к другому. Потому что фактически это один тип, но как компайлер о них должен думать по стандарту? (то что как минимум в 99% это работать будет и так понятно)
Это 2 разных типа по определению
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Кастить через что?
источник

P

Pepe 🐸 in pro.cxx
Artöm Bakri Al-Sarmini
Кастить через что?
пойнтеры через reinterpret_cast разумеется. И дереференсить потом
источник

AB

Artöm Bakri Al-Sarmini in pro.cxx
Pepe 🐸
пойнтеры через reinterpret_cast разумеется. И дереференсить потом
Нельзя, потому что они не алиасятся
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
всегда можно сделать (B*)&a
источник

P

Pepe 🐸 in pro.cxx
Artöm Bakri Al-Sarmini
Нельзя, потому что они не алиасятся
ну вот
источник

P

Pepe 🐸 in pro.cxx
Vyacheslav Olkhovchenkov
всегда можно сделать (B*)&a
но не дереференсить это
источник

DS

Dmitry Sokolov in pro.cxx
Anatoly Shirokov
возможный лэйаут:
struct {int a; int b; int c;} // AAAAPPPPBBBBPPPPCCCCPPPP
Ну по ia64 abi layout таки одинаковый.
источник