Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.09.2015, 06:16   #21
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
сказал человек, пишущий на C#
Так это не с++.
Цитата:
Каждый язык лучше приспособлен для одних задач и хуже - для других, если возникает необходимость писать много костылей, то, наверное, стоит задуматься о выборе другого инструмента.
Я писал примерно тоже самое, но не в столь острой форме - упоминал же, что не вижу задачу где мне требуется обменять местами значения переменных. А суть проблемы темы как я ее понял описал еще в первом посте - в Паскале процедура может издеваться над своими параметрами.
Цитата:
ну так раз нельзя без привязки, значит какое-либо сравнение должно производиться только в определенном контексте, который, как правило, правильно подобрать просто невозможно.
Ну тут как бэ да. Только в общем виде - типа языки императивные и т.д. А любая конкретика будет бессмыслена.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 19.09.2015, 11:35   #22
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,669
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
сказал человек, пишущий на C# так вот всегда и происходит. Каждый язык лучше приспособлен для одних задач и хуже - для других, если возникает необходимость писать много костылей, то, наверное, стоит задуматься о выборе другого инструмента.
Поэтому и перешли/переходят с С++ на Java и С#.

Цитата:
Я говорил про общий случай, а не про конкретный язык. Где-то поведение будет как Вы описали, где-то - как я.
Наоборот, Вы говорите про частный случай, т.к. С++ это единственный язык претендующий на совместимость с Си (а не просто подобный синтаксис).
В общем случае же проблемы просто не существует - она исчезает со ссылочной реализацией классов. А в С++ class это тот же самый struct с private-членами по умолчанию (а не то, что называется классом в 99+% языках), что даёт архитектуре чуть более чем ничего. Если костыли лепить по чайной ложке, это может тянуться бесконечно, и в результате появляется 100500 конструкций за которые можно отрывать части тел. Вот ни один серьёзный и надежный алгоритм не допускает размещения сложных структур данных в общем стеке вообще, как это в С++ делается по умолчанию. Хотя теоретически компилятор вполне может оптимизировать выделение динамической памяти до размещения в общем стеке там, где такое возможно.
Благими намерениями устлана дорога на programmersforum.ru

Последний раз редактировалось MihalNik; 19.09.2015 в 11:50.
MihalNik вне форума Ответить с цитированием
Старый 19.09.2015, 14:31   #23
taras-proger
Подтвердите свой е-майл
 
Регистрация: 12.11.2014
Сообщений: 470
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
1)тот код что вы привели этот тот код за который я бы увольнял.
Если он встретится в реальном проекте. Я сам знаю, что это отборная фигня. Да вопрос не в том, почему так не делают. Не делают именно потому, что фигня. Вопрос в том, почему данная реализация изменяемых параметров игнорируется в тексте.
Цитата:
Сообщение от Utkin Посмотреть сообщение
Динамические массивы например. Векторы, списки и т.д.
Я не знаю, может ассемблерщикам и надо. В моей жизни и на Делфи и на c# вообще никогда не потребовалось поменять местами значения переменных . Нафига это в жизни?
Вот как раз при работе с массивами эта задача и возможна. Например, многие алгоритмы сортировки сводятся
1. Найти два элемента, стоящие относительно друг друга в неправильном порядке
2. Если нашли, то: поменять их местами и повторить поиск.
А различаются только тем, как именно ищется пара элементов, стоящих в не правильном порядке относительно друг друга. И массив ни как не решит задачу возврата из подпрограммы значения не самой функции, а параметра. Внимание, не существующий синтаксис.
Код:
void f(var int x)
{
 int n;
 int i;
 for (n=x, x=1, i=1; i<=n; ++i)
 {
  x*=i;
 }
}
int main()
{
 int k;
 k=8;
 f(k);
 return 0;
};
Как сделать, чтоб k стало равно 40320, а не осталось равно 8? Можно передать функции информацию о том, где находится k, а в коде функции менять значение по этому адресу. То есть за изменение значения фактического параметра отвечает код функции. А можно, но не нужно, сделать так, чтоб вызывающий код передавал и принимал значение. Не адрес, а значение. За изменение фактического параметра в этом случае будет отвечать вызывающий код. А вот массив, хоть статический, хоть динамический эту задачу не решает, если его передать по значению, то передана будет копия, ни какие изменения элементов массива, которые внесёт функция, не могут отразиться на исходном массиве. На c/c++ изменения функцией элементов массива отражаются на исходном массиве только лишь потому, что они передаются не по значению, а по неявному указателю. Передавать по значению и потом копировать ещё раз - это не не оптимально, это отборная фигня и намеренная пессимизация. Но вопрос в том, почему это даже не описано.

Последний раз редактировалось taras-proger; 19.09.2015 в 14:55.
taras-proger вне форума Ответить с цитированием
Старый 19.09.2015, 15:05   #24
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
Передавать по значению и потом копировать ещё раз - это не не оптимально
это должны знать все.
классная у тебя трава. или может химией себя затравил, из-за того что самогонный аппарат сломался?

Последний раз редактировалось f.hump; 19.09.2015 в 15:21.
f.hump вне форума Ответить с цитированием
Старый 19.09.2015, 15:13   #25
taras-proger
Подтвердите свой е-майл
 
Регистрация: 12.11.2014
Сообщений: 470
По умолчанию

Я знаю, каких типов бывают функции. Но ведь зачем то же изменяемые параметры, через которые тоже возвращаются значения, придуманы. Вот об их реализации и речь.
taras-proger вне форума Ответить с цитированием
Старый 19.09.2015, 15:34   #26
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
зачем то же изменяемые параметры, через которые тоже возвращаются значения, придуманы.
Кэп очнитесь, у вас очевидностью запахло. Изменяемые параметры придумали чтоб... Внимание! - изменять в них значения.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.09.2015, 15:45   #27
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Кэп очнитесь, у вас очевидностью запахло. Изменяемые параметры придумали чтоб... Внимание! - изменять в них значения.
Блин, ну нафига ты все интригу обломал?
Цитата:
Вот как раз при работе с массивами эта задача и возможна. Например, многие алгоритмы сортировки сводятся
М-мм, есть один секрет и даже страшная тайна. Нормальные люди не пишут сортировку снова и снова. Они просто пользуются уже готовыми решениями, где за них уже все поменяли местами так как надо.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 19.09.2015, 16:20   #28
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от taras-proger Посмотреть сообщение
Нет. Речь о передаче по значению но с обратным копированием, фрагменте исходника, компилируемом из
Код:
swap (x,y);
в
Код:
MOV EBX, [DWORD PTR]@x
MOV ECX, [DWORD PTR]@y
PUSH EBX
PUSH ECX
CALL SWAP
POP ECX
POP EBX
MOV [DWORD PTR]@y, ECX
MOV [DWORD PTR]@x, EBX
. Обратите внимание: здесь за извлечение изменённых параметров из стека и копирование их в переменные отвечает вызывающий код, но это именно параметры, а не значение функции. А вот свои болячки другим не красиво приписывать. Кстати, я уже исправил "Страуструпа" на "Шилдта". И не берите пример с Ольги Лосоноговой.
Я приписываю? Та, шоб я сдох! Ну, если непонятки, так это уже не моя проблема.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 19.09.2015, 16:32   #29
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

2 taras-proger, вы три страницы распинаетесь, но так и не привели ни одного отличия от передачи по ссылке... ну совсем.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть ли такая возможность подключить больше одно HDD-SATA к BeagleBone/CubieTruck pompiduskus Компьютерное железо 0 04.10.2014 17:49
О книгах Halifath Помощь студентам 3 11.02.2010 08:00
DBGrid есть ли такая возможность Baharev БД в Delphi 10 28.11.2009 20:17
Почему такая разница между Integer и LongInt? k1r1ch Общие вопросы Delphi 13 13.10.2009 09:01
почему такая бяка??? Sjava Свободное общение 17 13.11.2006 08:37