Size: a a a

2021 March 15

АР

Андрей Руссков... in pro.cxx
и я утверждаю что нет
источник

SS

Sergey Skvortsov in pro.cxx
Андрей Руссков
спор был можно ли кастовать a.d к B*
Изначально — можно ли обращаться к struct B { double d; }; через указатель на struct A { double d; };
источник

SS

Sergey Skvortsov in pro.cxx
Андрей Руссков
мне казалось что стандарт позволяет реинтерпреткастить эквивалентные тривиальные структуры данных, типа struct A { double; } и struct B { double; }
Примерно здесь
источник

VS

Vlad Serebrennikov in pro.cxx
если бы a.d и b.d были pointer-interconvertible, то можно было бы
источник

АР

Андрей Руссков... in pro.cxx
Sergey Skvortsov
Примерно здесь
а ниже я упоминаю что не помню наверняка является ли это правило эксклюзивным для стандарта си )
источник

AN

Alexander N in pro.cxx
Помню спорили мы однажды с товарищами о касте struct A {double d;} ; в double через reinterpretat_cast и пришли к тому, что можно вроде как по стандарту, а что мешает в B кастить так если конечно у B нет отличий?
источник

LA

Liber Azerate in pro.cxx
Alexander N
Помню спорили мы однажды с товарищами о касте struct A {double d;} ; в double через reinterpretat_cast и пришли к тому, что можно вроде как по стандарту, а что мешает в B кастить так если конечно у B нет отличий?
Standard layout структуру(класс) вполне можно кастить к указателю на свой первый член по стандарту
источник

VS

Vlad Serebrennikov in pro.cxx
Alexander N
Помню спорили мы однажды с товарищами о касте struct A {double d;} ; в double через reinterpretat_cast и пришли к тому, что можно вроде как по стандарту, а что мешает в B кастить так если конечно у B нет отличий?
что мешает преобразовать reinterpret_cast<double*>(&a) в B*? то, что &a.d и &b.d не pointer-interconvertible
источник

ПК

Побитый Кирпич... in pro.cxx
Alexander N
Помню спорили мы однажды с товарищами о касте struct A {double d;} ; в double через reinterpretat_cast и пришли к тому, что можно вроде как по стандарту, а что мешает в B кастить так если конечно у B нет отличий?
То что первый член A не первый член B, и вообще не член
источник

И

Или всё-таки Ирочка?... in pro.cxx
Побитый Кирпич
То что первый член A не первый член B, и вообще не член
Член это хорошо
источник

ПК

Побитый Кирпич... in pro.cxx
Боты совсем охерели
источник

ПК

Побитый Кирпич... in pro.cxx
Уже на ключевые слова реагируют)
источник

A

Andrei Konshyn in pro.cxx
Побитый Кирпич
Уже на ключевые слова реагируют)
turing test failed
источник

AR

Alexandr Rudalev in pro.cxx
`struct A { double d; }; и `double - pointer-interconvertible по стандарту.
`struct B { double d; }; и `double - pointer-interconvertible по стандарту.
как следствие A и B - pointer-interconvertible по стандарту.
Адреса структуры и его первого поля равны по стандарту.
Приводи сколько хочешь. Только это читается и поддерживается хреново.
источник

ПК

Побитый Кирпич... in pro.cxx
Alexandr Rudalev
`struct A { double d; }; и `double - pointer-interconvertible по стандарту.
`struct B { double d; }; и `double - pointer-interconvertible по стандарту.
как следствие A и B - pointer-interconvertible по стандарту.
Адреса структуры и его первого поля равны по стандарту.
Приводи сколько хочешь. Только это читается и поддерживается хреново.
из 1 и 2 не вытекает такого следствия, ошибка в логике
источник

AR

Alexandr Rudalev in pro.cxx
Побитый Кирпич
из 1 и 2 не вытекает такого следствия, ошибка в логике
there exists an object c such that a and c are pointer-interconvertible, and c and b are pointer-interconvertible
источник

AD

Andrey Davydov in pro.cxx
Alexandr Rudalev
`struct A { double d; }; и `double - pointer-interconvertible по стандарту.
`struct B { double d; }; и `double - pointer-interconvertible по стандарту.
как следствие A и B - pointer-interconvertible по стандарту.
Адреса структуры и его первого поля равны по стандарту.
Приводи сколько хочешь. Только это читается и поддерживается хреново.
источник

ПК

Побитый Кирпич... in pro.cxx
Alexandr Rudalev
there exists an object c such that a and c are pointer-interconvertible, and c and b are pointer-interconvertible
Ну, чтобы применить это надо доказать что A{}.d и B{}.d pointer-interconvertible
Что невозможно, потому что это не так)
источник

AR

Alexandr Rudalev in pro.cxx
Побитый Кирпич
Ну, чтобы применить это надо доказать что A{}.d и B{}.d pointer-interconvertible
Что невозможно, потому что это не так)
С какого перепуга вообще рассматриваются  A{}.d и B{}.d  - это поля а не структуры (типы). В данном случае нам гарантируется, что если мы приведём A к B, то их поля d будут храниться в одном и том же месте.
источник

AR

Alexandr Rudalev in pro.cxx
И компилятор верно сделал оптимизацию
источник