Войти
ФлеймФорумПрограммирование

Преобразование ссылок на массив [KRESTOPROBLEMY] (5 стр)

Страницы: 14 5 6 7 8 Следующая »
#60
12:22, 29 мар. 2018

Блин, всем присутствующим можно расслабить булки - всё передаёт, если передавать как следует, а не богомерзкие крестоссылки использовать: https://ideone.com/npHlrn

#61
12:46, 29 мар. 2018

=A=L=X=
> Блин, всем присутствующим можно расслабить булки - всё передаёт, если
> передавать как следует, а не богомерзкие крестоссылки использовать:
> https://ideone.com/npHlrn

гм...

https://gamedev.ru/flame/forum/?id=234737&page=2#m22

#62
12:49, 29 мар. 2018

=A=L=X=
надо наоборот, чтоб передавался срез

#63
15:04, 29 мар. 2018

=A=L=X=

int perdysh( int param[20] )

Это тоже, что:

int perdysh( int param[] )

И тоже, что:

int perdysh( int* param )

Т.е. к массивам имеет посредственное отношение.

#64
15:08, 29 мар. 2018

1 frag / 2 deaths
Моё видение: ситуация когда между разными типами нет автоматического приведение - базовая, и по умолчанию. Для исключений из этого необходим отдельный повод. Для наследования - повод считается веским. Для (под)массива - видимо нет.
Что выглядит логично.

struct A {int x0,x1;};
struct B:A {int x2;};
struct C {int x0,x1,x2;};
struct D {A a;int x2;};
Функция принимающая (указатель на/ссылку на) A примёт и B, но не C или D.
Почему считать массивы ближе к наследованию, а не тупо к добавлению элемента - непонятно.
Естественно передача массива большего размера тоже может, в общем случае, порушить какие-то инварианты (ну например принимающий код ожидает именно buf[N-1]==0).
Ну и если делать ссылки на массивы подобно наследованию - тогда уж делать и указатели. Что, внезапно, затрагивает и C (в котором наследования вообще нет).
http://rextester.com/MQUV9225

Пример =A=L=X= из #60 непонятно о чём, т. к. 20 в int param[20] чисто фиктивное (то же самое, что и int[], в смысле int*), и туда можно спокойно передать как int[10] так и int[50].

#65
15:14, 29 мар. 2018

1 frag / 2 deaths
Если бы в языке были полноценные встроенные slices - тогда другой разговор, но без них - передача подмассива всё-равно не полностью помогает, вроде же.

#66
18:10, 29 мар. 2018

Panzerschrek[CN]
> Как так то? Отчего нельзя так просто преобразовать ссылку на больший массив в
> ссылку на меньший массив?
С++ для этого не предназначен. Вот и все : )

#67
18:12, 29 мар. 2018

Great V.
> С++ для этого не предназначен. Вот и все : )
Ясно-понятно.
Пойду в Ü запилю такого рода преобразования.

#68
18:25, 29 мар. 2018

Panzerschrek[CN]
> Пойду в Ü запилю такого рода преобразования.
Я бы не рекомендовал.
Неужели никому до сих пор непонятна причина все этой убогости?
С++ решает задачи не языка, а сразу всего.
Он задает примитивы, допустимые преобразования, правила превращения литералов и разбора синтаксиса, расположение элементов в памяти, модели работы с ней же, а так же механизмы полиморфизма и много чего еще...
Но зачем это языку? Полиморфизм, примитивы , литералы, память - все это можно сделать ручками. Да, какому-то энтузиасту придется повозиться разок-второй, чтобы написать какую-то либу. Зато язык будет свободен от хлама, который, возможно, потом будет только мешать.
Но нет, все это гвоздями прибито к языку. Бесспорно, что для решения тех задач, которые решали пол века назад, того что есть в С++ достаточно.
Но если надо допилить что-то свое - то приходиться не допиливать класс или библиотеку - а допиливать язык.
Это путь в никуда.
Чем больше язык решает задач не относящихся к языку - тем более он становиться решением сиюминутных проблем.
Надо двигать в сторону пустого метаязыка с примитивами и операциями в виде библиотек (а не ядра).

А то, что происходит сейчас, больше напоминает "давайте запилим в С++ класс для работы с блокчейном и нейросетями, потому что они сейчас в тренде".

#69
18:26, 29 мар. 2018

Great V.
> С++ для этого не предназначен. Вот и все : )

он прекрасно умеет в систему изнасилования типов.
ничего не мешает запилить шаблон,
который организует каст под любые ваши
самые извращенные фантазии.

#70
5:24, 30 мар. 2018

Kartonagnick
> изнасилования типов
Что такое "изнасилование типов"?

#71
7:03, 30 мар. 2018

Kartonagnick
> он прекрасно умеет в систему изнасилования типов
а еще он весьма хорош в систему изнасилование мозга.

#72
8:26, 30 мар. 2018

Panzerschrek[CN]
> Что такое "изнасилование типов"?
reinterpret_cast

#73
11:49, 30 мар. 2018

Panzerschrek[CN]
> Что такое "изнасилование типов"?

каст типа массива на 100 элементов к типу массива на 120 элементов,
например.

#74
12:43, 30 мар. 2018

Kartonagnick
> > Что такое "изнасилование типов"?
>
> каст типа массива на 100 элементов к типу массива на 120 элементов,
> например.

Какое же это изнасилование? Изнасилование было бы при касте массива размером 120 в массив размером 100. Типа "вставляем трубу в отверстие меньшего диаметра" по твоей терминологии.

Страницы: 14 5 6 7 8 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.