Size: a a a

2021 March 14

IZ

Ilia Zviagin in pro.cxx
Sergey Skvortsov
В таком случае это противоречит
http://eel.is/c++draft/expr.add#4
Выделенное зелёным означает ровно то, что нельзя производить операции с указателями которые не указывают на один и тот же массив.

Тут все указывает на один массив
источник

SS

Sergey Skvortsov in pro.cxx
Ilia Zviagin
Выделенное зелёным означает ровно то, что нельзя производить операции с указателями которые не указывают на один и тот же массив.

Тут все указывает на один массив
Нет, на разные
источник

VS

Vlad Serebrennikov in pro.cxx
можно ли выстроить логику, что многомерный массив является одномерным массивом такого же размера? у меня ввиду цитат выше не выходит
источник

SS

Sergey Skvortsov in pro.cxx
Sergey Skvortsov
Нет, на разные
В стандарте нет понятия "многомерный массив", он получается автоматически
источник

АК

Александр Караев... in pro.cxx
Stas Koynov
чувак это просто кусок памяти все! там нет внутри размерностей или типа того, как в делфи. просто память как ты с ней будешь работать это твое дело. посмотри любой код работы с картинками. там когда идет преобразование то это тупо пиксели один за другим. когда работа с обьектами то это двухмерные массивы. это просто удобно. если ты хочешь работать с указателем и каждый раз смещать его через sizeof(размер_пикселя*ширину_картинки) да ради бога...
Вот это аргумент из серии "я всегда писал код с UB и ничего, жив остался"
источник

IZ

Ilia Zviagin in pro.cxx
Vlad Serebrennikov
можно ли выстроить логику, что многомерный массив является одномерным массивом такого же размера? у меня ввиду цитат выше не выходит
Можно
источник

VS

Vlad Serebrennikov in pro.cxx
Александр Караев
Вот это аргумент из серии "я всегда писал код с UB и ничего, жив остался"
а не из серии «на С++ мы пишем под процессор»?
источник

АК

Александр Караев... in pro.cxx
Vlad Serebrennikov
а не из серии «на С++ мы пишем под процессор»?
В том числе из этой :)
источник

SK

Stas Koynov in pro.cxx
Александр Караев
Вот это аргумент из серии "я всегда писал код с UB и ничего, жив остался"
тоесть вы утверждаете что: массив int array[3][5] в памяти лежит совсем иначе чем int array[15]?
источник

АК

Александр Караев... in pro.cxx
Stas Koynov
тоесть вы утверждаете что: массив int array[3][5] в памяти лежит совсем иначе чем int array[15]?
Я вообще ничего не утверждал. Но я могу утверждать, что лежащие в памяти sizeof(int) подряд байт - это ещё не int. Так и тут - лежащие подряд int ещё не образуют массив.
источник

SK

Stas Koynov in pro.cxx
Александр Караев
Я вообще ничего не утверждал. Но я могу утверждать, что лежащие в памяти sizeof(int) подряд байт - это ещё не int. Так и тут - лежащие подряд int ещё не образуют массив.
вопрос был про массивы, при чем тут байты, и инт. который еще нужно смотреть эндианс как он там лежит.
источник

АК

Александр Караев... in pro.cxx
Stas Koynov
тоесть вы утверждаете что: массив int array[3][5] в памяти лежит совсем иначе чем int array[15]?
Лежать в памяти - это вообще про другое.
источник

O

Ofee in pro.cxx
Stas Koynov
тоесть вы утверждаете что: массив int array[3][5] в памяти лежит совсем иначе чем int array[15]?
Нет, скорее, тут речь о том, что в случае conforming c++ implementation, всё ещё есть право бросить исключение (или любое другое проявление UB) при доступе даже при том, что объекты в памяти расположены последовательно. И да, судя по всему — это формальное UB, но я бы тут был, скорее, за здравый смысл
источник

BU

Boris Usievich in pro.cxx
1.  В стандарте написано, что по индексу эквивалентен доступу по смещенному указателю. 2.  Там так же написано, что элементы многомерного массива расположены подряд. по-моему следствие очевидно
источник

SK

Stas Koynov in pro.cxx
ладно это уже какой то троллинг, оффтоп ладно. массив int [15] и [3][5] это массивы как в делфи ок, там есть размерность. и когда вы лезите через указатель (это можно согласно 7.2 и заметку 7 про массивы) то маленькие гномики UB на уровне проца вас ругают ибо ой вы все нарушили... это ведь разные типы как вы могли...
источник

SK

Stas Koynov in pro.cxx
Boris Usievich
1.  В стандарте написано, что по индексу эквивалентен доступу по смещенному указателю. 2.  Там так же написано, что элементы многомерного массива расположены подряд. по-моему следствие очевидно
НЕТ это УБ, там живут маленькие гномики!
источник

BU

Boris Usievich in pro.cxx
ах, да там еще написано, что адрес массива можно конвертить в адрес первого элемента
источник

SK

Stas Koynov in pro.cxx
Boris Usievich
ах, да там еще написано, что адрес массива можно конвертить в адрес первого элемента
изыди сатана. ЭТО УБ, грязный указатель без шаред_пойнтера как ты вообще на ++ пишешь
источник

AG

Andrey Glebov in pro.cxx
Из https://eel.is/c++draft/dcl.array#9 получается что "многомерный массив" это просто массив массивов.
Это почти как std::array<std::array<int, 5>, 3>.  Мы же не можем безопасно скастить указатель на объект этого типа к указателю на std::aray<int, 15>.
источник

BU

Boris Usievich in pro.cxx
Stas Koynov
изыди сатана. ЭТО УБ, грязный указатель без шаред_пойнтера как ты вообще на ++ пишешь
Все претензии к авторам стандарта
источник