Size: a a a

2021 March 28

m

magras in pro.cxx
Boris Usievich
И что делать если он у меня 2D? конвертить в 1D? с точки зрения стандарта получится UB
Заменить его на одномерный. Я еще в начале карьеры многомерные массивы принял как вредную фичу и просто никогда не использую.
источник

BU

Boris Usievich in pro.cxx
Проблема сейчас в-основном в том, что совершенно легальный очевидный  код формально является UB. менее существенная проблема - в constexpr оно просто не компилируется. Ну и есть потенциальные грабли, шибко оптимизирующий компилятор имеет полное право решить, что строки 2D массива кроме первой не модифицируются и что-то из этого вывести
источник

BU

Boris Usievich in pro.cxx
Ну и насчет врапперов. Это чудесно, но mdspan до сих пор не стандартизирован. Каждый раз городить велосипеды?
источник

m

magras in pro.cxx
Boris Usievich
Ну и насчет врапперов. Это чудесно, но mdspan до сих пор не стандартизирован. Каждый раз городить велосипеды?
Зачем? Есть много готовых: opencv, eigen, blaze. Люди ближе к теме наверняка назовут еще несколько.
источник

BU

Boris Usievich in pro.cxx
magras
Зачем? Есть много готовых: opencv, eigen, blaze. Люди ближе к теме наверняка назовут еще несколько.
ну да, велосипедов много, возникает проблема выбора
источник

m

magras in pro.cxx
Boris Usievich
ну да, велосипедов много, возникает проблема выбора
Тащить все подряд в стандарт тоже не лучшая идея. А то мы так и до BLAS в стандарте С++ доберемся когда-нибудь.
источник

BU

Boris Usievich in pro.cxx
Конечно все тащить не нужно.  Но поправить чуток стандарт в части существования многомерных массивов и доступа к ним через одномерный IMHO не мешало бы
источник

AP

Antony Polukhin in pro.cxx
magras
Тащить все подряд в стандарт тоже не лучшая идея. А то мы так и до BLAS в стандарте С++ доберемся когда-нибудь.
BLAS предлагают для включения в стандарт и даже несколько раз его обсуждали
источник

AP

Antony Polukhin in pro.cxx
Так что года через 3-6 есть все шансы увидеть в стандарте
источник

BU

Boris Usievich in pro.cxx
BLAS прекрасно существует безотносительно к C++
источник

m

magras in pro.cxx
Boris Usievich
Конечно все тащить не нужно.  Но поправить чуток стандарт в части существования многомерных массивов и доступа к ним через одномерный IMHO не мешало бы
На счет того, что это грабли на которые судя по предыдущему обсуждению уже многие наступили и что это плохо я согласен. А вот что делать с этим я не знаю. Просто добавлять исключение в правило выхода за границы массива звучит не очень.
источник

BU

Boris Usievich in pro.cxx
magras
На счет того, что это грабли на которые судя по предыдущему обсуждению уже многие наступили и что это плохо я согласен. А вот что делать с этим я не знаю. Просто добавлять исключение в правило выхода за границы массива звучит не очень.
На самом деле в стандарте уже почти все есть. layout многомерных массивов определен. Как работает индексация тоже. Достаточно разрешить (видимо только явное) преобразование указателей на массивы разной размерности (при условии, что новый массив по реальному размеру умещается в оригинальный, а иначе UB)
источник

m

magras in pro.cxx
Boris Usievich
На самом деле в стандарте уже почти все есть. layout многомерных массивов определен. Как работает индексация тоже. Достаточно разрешить (видимо только явное) преобразование указателей на массивы разной размерности (при условии, что новый массив по реальному размеру умещается в оригинальный, а иначе UB)
А явный каст на мой взгляд ничего не решит. Проблема же в том, что писать *a или a[0] удобно и так написано много кода.
источник

m

magras in pro.cxx
Собственно вместо того чтобы учить людей использовать явный каст, можно учить людей не использовать многомерные массивы.
источник

BU

Boris Usievich in pro.cxx
Явный каст решит проблему как динамически выделить многомерный массив с неконстантными размерами
источник

ПК

Побитый Кирпич... in pro.cxx
Boris Usievich
Явный каст решит проблему как динамически выделить многомерный массив с неконстантными размерами
Его и щас можно выделить
источник

BU

Boris Usievich in pro.cxx
Многомерный массивы это естественная абстракция, существующая во всех языках, зачем от нее отказываться?
источник

ПК

Побитый Кирпич... in pro.cxx
Boris Usievich
Многомерный массивы это естественная абстракция, существующая во всех языках, зачем от нее отказываться?
Никто не отказывается от абстракции. Отказываемся от реализации в виде сишных массивов
источник

BU

Boris Usievich in pro.cxx
Они не сишные, они такие везде :)
источник

m

magras in pro.cxx
Boris Usievich
Они не сишные, они такие везде :)
В плюсах уже есть std::array. =)
источник