Size: a a a

2021 March 15

м

мыши in pro.cxx
Boris Usievich
вернемся к любимым массивам. Тут кто-то вчера писал, что если передать указатель на начало массива, то компилятор имеет полное право считать, что все строки кроме первой не используются и выкинуть их вообще. Это чудесно, но всякие BLAS именно таким образом и получают параметры.
А откуда компилятор узнает, где кончается первая строка, чтобы выкинуть остальные?
источник

S

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

VS

Vlad Serebrennikov in pro.cxx
Андрей Руссков
мне казалось что стандарт позволяет реинтерпреткастить эквивалентные тривиальные структуры данных, типа struct A { double; } и struct B { double; }
по-моему, нет
basic.compound#4
источник

SS

Sergey Skvortsov in pro.cxx
Андрей Руссков
но я могу путать со стандартом си
Это только в си, да
источник

АР

Андрей Руссков... in pro.cxx
Vlad Serebrennikov
по-моему, нет
basic.compound#4
кажется, судя по п. 4.4 и A и B могут быть pointer interconvertible с double )
источник

АР

Андрей Руссков... in pro.cxx
но вот в случае более сложных структур начинается веселье...
источник

VS

Vlad Serebrennikov in pro.cxx
Андрей Руссков
кажется, судя по п. 4.4 и A и B могут быть pointer interconvertible с double )
а, да, через первое поле standard-layout действительно получится
источник

VS

Vlad Serebrennikov in pro.cxx
Андрей Руссков
но вот в случае более сложных структур начинается веселье...
можно ли как-то гарантировать совпадение layout двух более сложных структур?
источник

АР

Андрей Руссков... in pro.cxx
мне кажется что будет затруднительно даже описать на standartese что значит "совпадает layout двух классов"
источник

АР

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

SS

Sergey Skvortsov in pro.cxx
Андрей Руссков
кажется, судя по п. 4.4 и A и B могут быть pointer interconvertible с double )
Нет же
Там конкретно про объекты написано, произвольный double не будет pointer interconvertible с A / B
источник

АР

Андрей Руссков... in pro.cxx
Sergey Skvortsov
Нет же
Там конкретно про объекты написано, произвольный double не будет pointer interconvertible с A / B
будет же, судя по 4.3 )
источник

SS

Sergey Skvortsov in pro.cxx
Андрей Руссков
будет же, судя по 4.3 )
... the other is the first non-static data member of that object
Произвольный дабл не будет членом A / B, хоть типы и совпадают
источник

АР

Андрей Руссков... in pro.cxx
Sergey Skvortsov
... the other is the first non-static data member of that object
Произвольный дабл не будет членом A / B, хоть типы и совпадают
ну A* можно приводить к double*
источник

АР

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

VS

Vlad Serebrennikov in pro.cxx
Андрей Руссков
ну A* можно приводить к double*
проблема в том, что разные объекты double не pointer-interconvertible
источник

SS

Sergey Skvortsov in pro.cxx
Андрей Руссков
обратно - нет
Вроде как можно, если double* был взят на первый дабл A
Но все равно A* к B* по транзитивности не сработает
источник

АР

Андрей Руссков... in pro.cxx
Sergey Skvortsov
Вроде как можно, если double* был взят на первый дабл A
Но все равно A* к B* по транзитивности не сработает
а отношение pointer interconvertible не объявлено как однонаправленное кстати )
источник

SS

Sergey Skvortsov in pro.cxx
Андрей Руссков
а отношение pointer interconvertible не объявлено как однонаправленное кстати )
Ну да, но тут не мешает это
источник

АР

Андрей Руссков... in pro.cxx
значит по стандарту double* можно приводить к A* )
источник