Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 194 195 [196] 197 198 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#2926
,
|
|
|
|
Цитата IL_Agent @ Но это С++. Семантика значений. Тут, когда я передаю кружку, по умолчанию наливается новая А тут как раз у С++ с этим все хорошо, тут просто нужно вдуматься в написаное, когда ты по ссылке передаешь объект в функцию - ты по сути передаешь кружку пива, которую нужно выпить... А когда по значению, то ты по сути, кружку с пивом оставляешь у себя, а функции передаешь пустой стакан, и говоришь ей: налей и выпей, что она и делает... |
|
Сообщ.
#2927
,
|
|
|
|
имхо неплохо было бы, если С++ компиль не генерил default copy constructor и assignment operator, если класс не является POD. IL_Agent был бы доволен
разве это противоречит какому-нибудь др принципу С++ ? |
|
Сообщ.
#2928
,
|
|
|
|
Цитата IL_Agent @ Если это опечатка и ты имел в виду шарп, то да, изменится, потому что...[далее тот же текст]. Опечатка. По этому и мой вопрос: Цитата Flex Ferrum @ Как-то не очень понятно. В одном случае так, в другом - сяк. Где логика? Как я могу сходу понять - объект, принимаемый функцией, обладает value- или ref-семантикой? Не видя объявления этого объекта? остаётся в силе. |
|
Сообщ.
#2929
,
|
|
|
|
|
Сообщ.
#2930
,
|
|
|
|
Цитата IL_Agent @ Если это опечатка и ты имел в виду шарп, то да, изменится, потому что...[далее тот же текст]. Далее под тем же текстом ты имел ввиду ведь этот текст: Цитата IL_Agent @ Объект "cdefgh" мы не трогали. В foo мы создали новый объект "abcdef" и присвоили его переменной str из foo. Переменную str из Bar мы так же не трогали. И почему он должен меняться ? Тут правда изменить нужно всего то два слова |
|
Сообщ.
#2931
,
|
|
|
|
Цитата KILLER @ Далее под тем же текстом ты имел ввиду ведь этот текст: Нет, следующий |
|
Сообщ.
#2932
,
|
|
|
|
Цитата IL_Agent @ Нет, следующий ![]() На мой вопрос ответь пожалуйста. |
|
Сообщ.
#2933
,
|
|
|
|
Цитата Radagast @ имхо неплохо было бы, если С++ компиль не генерил default copy constructor и assignment operator, если класс не является POD. IL_Agent был бы доволен ![]() Как вариант. Но тогда не будет работать ![]() ![]() A a1; A a2, a3 = a1; a2 = a1; без доп. кода. Цитата Radagast @ разве это противоречит какому-нибудь др принципу С++ ? Двойная семантика же Обобщённый код не пострадает ? |
|
Сообщ.
#2934
,
|
|
|
|
Цитата IL_Agent @ Нет, следующий Ну так, Флекс, у тебя вот уже 3 сообщение спрашивает, где логика? Чем String отличается от FooClass ? Или это особенность operator = такая ? |
|
Сообщ.
#2935
,
|
|
|
|
Разницу между твоими примерами я объяснил. В одном случае объект не трогается, в другом - вызывается его метод. Строка - тоже reference. Цитата Flex Ferrum @ Как я могу сходу понять - объект, принимаемый функцией, обладает value- или ref-семантикой? Не видя объявления этого объекта? Никак, чего уж там Но это другая проблема. |
|
Сообщ.
#2936
,
|
|
|
|
Цитата IL_Agent @ Никак, чего уж там Но это другая проблема. Да нет. Это не другая проблема. Это проблема очень большая - проблема читаемости и писаемости кода. Я должен точно знать семантику типа, чтобы адекватным образом его использовать в метода, например. И чтобы не получалось непоняток, когда я (на самом деле) модифицирую копию, а не переданный объект. А такое, как мы выяснили, и в шарпе возможно (см. мой первый пример). Цитата IL_Agent @ Разницу между твоими примерами я объяснил. В одном случае объект не трогается, в другом - вызывается его метод. Строка - тоже reference. Опять же. Непонятная семантика. Точнее, скрытая неоднозначность. Мне надо прикладывать определённые мозговые усилия, чтобы понять - к чему именно приведёт оператор присваивания. |
|
Сообщ.
#2937
,
|
|
|
|
Цитата Flex Ferrum @ Мне надо прикладывать определённые мозговые усилия, чтобы понять - к чему именно приведёт оператор присваивания. Никаких усилий. Если ref - присваиваеися тот же самый объект, если value - копия. Мозговые усилия - это когда разбираешь код конструктора копирования / оператора присваивания. |
|
Сообщ.
#2938
,
|
|
|
|
Цитата IL_Agent @ Никаких усилий. Если ref - присваиваеися тот же самый объект, если value - копия. Мозговые усилия - это когда разбираешь код конструктора копирования / оператора присваивания. Опаньки, а как это так? Оператор '=' и вызов метода Assign - эквивалентны или нет? Возьмём мой первый пример, и чуть-чуть подрихтуем: ![]() ![]() public void Foo(String str) { str.Assign("abcdef"); } public void Bar() { String str = "cdefgh"; Foo(str); }; Поведение волшебным образом изменится? И str в Bar поменяет своё состояние? |
|
Сообщ.
#2939
,
|
|
|
|
Цитата IL_Agent @ Никаких усилий. Если ref - присваиваеися тот же самый объект, если value - копия. Ну так и какую роль у тебя играет: ![]() ![]() public void Foo(String str) и ![]() ![]() public void Foo(FooClass foo) Почему одно изменится, другое нет? И где там написано ref/value ? |
|
Сообщ.
#2940
,
|
|
|
|
Цитата Flex Ferrum @ Оператор '=' и вызов метода Assign - эквивалентны или нет? В дотнете у стринга нет такого метода В любом случае,в C# вызов метода объекта никак не может быть эквивалентен оператору =.Цитата Flex Ferrum @ Поведение волшебным образом изменится? И str в Bar поменяет своё состояние? Ну и ? Обе переменные str осуществляют доступ к одному и тому же объекту до того, как мы одной из них не присвоим другой объект. В данном случае присваивания нет, зато есть обращение к этому самому объекту и изменение его состояния. Если допустить, что метод такой таки есть |