На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (495) « Первая ... 194 195 [196] 197 198 ...  494 495  ( Перейти к последнему сообщению )  
> Delphi vs C++ vs C# , ну и Java немножко, где-то ближе к старшему байту номеров страниц
    Цитата IL_Agent @
    Но это С++. Семантика значений. Тут, когда я передаю кружку, по умолчанию наливается новая

    А тут как раз у С++ с этим все хорошо, тут просто нужно вдуматься в написаное, когда ты по ссылке передаешь объект в функцию - ты по сути передаешь кружку пива, которую нужно выпить... А когда по значению, то ты по сути, кружку с пивом оставляешь у себя, а функции передаешь пустой стакан, и говоришь ей: налей и выпей, что она и делает...
      имхо неплохо было бы, если С++ компиль не генерил default copy constructor и assignment operator, если класс не является POD. IL_Agent был бы доволен :) разве это противоречит какому-нибудь др принципу С++ ?
        Цитата IL_Agent @
        Если это опечатка и ты имел в виду шарп, то да, изменится, потому что...[далее тот же текст].

        Опечатка. По этому и мой вопрос:
        Цитата Flex Ferrum @
        Как-то не очень понятно. В одном случае так, в другом - сяк. Где логика? Как я могу сходу понять - объект, принимаемый функцией, обладает value- или ref-семантикой? Не видя объявления этого объекта?

        остаётся в силе.
          Цитата KILLER @
          Ага, а ты почему не упомянул об этом?

          Ну... может, потому что не к месту :)
            Цитата IL_Agent @
            Если это опечатка и ты имел в виду шарп, то да, изменится, потому что...[далее тот же текст].

            Далее под тем же текстом ты имел ввиду ведь этот текст:
            Цитата IL_Agent @
            Объект "cdefgh" мы не трогали. В foo мы создали новый объект "abcdef" и присвоили его переменной str из foo. Переменную str из Bar мы так же не трогали. И почему он должен меняться ?

            Тут правда изменить нужно всего то два слова ;)
              Цитата KILLER @
              Далее под тем же текстом ты имел ввиду ведь этот текст:

              Нет, следующий :)
                Цитата IL_Agent @
                Нет, следующий :)

                На мой вопрос ответь пожалуйста. :)
                  Цитата Radagast @
                  имхо неплохо было бы, если С++ компиль не генерил default copy constructor и assignment operator, если класс не является POD. IL_Agent был бы доволен :)

                  Как вариант. Но тогда не будет работать
                  ExpandedWrap disabled
                    A a1;
                    A a2, a3 = a1;
                    a2 = a1;

                  без доп. кода.
                  Цитата Radagast @
                  разве это противоречит какому-нибудь др принципу С++ ?

                  Двойная семантика же :) Обобщённый код не пострадает ?
                  Сообщение отредактировано: IL_Agent -
                    Цитата IL_Agent @
                    Нет, следующий

                    Ну так, Флекс, у тебя вот уже 3 сообщение спрашивает, где логика? Чем String отличается от FooClass ? Или это особенность operator = такая ?
                    Сообщение отредактировано: KILLER -
                      Цитата Flex Ferrum @
                      Как-то не очень понятно. В одном случае так, в другом - сяк.

                      Разницу между твоими примерами я объяснил. В одном случае объект не трогается, в другом - вызывается его метод. Строка - тоже reference.

                      Цитата Flex Ferrum @
                      Как я могу сходу понять - объект, принимаемый функцией, обладает value- или ref-семантикой? Не видя объявления этого объекта?

                      Никак, чего уж там :) Но это другая проблема.
                      Сообщение отредактировано: IL_Agent -
                        Цитата IL_Agent @
                        Никак, чего уж там :) Но это другая проблема.

                        Да нет. Это не другая проблема. Это проблема очень большая - проблема читаемости и писаемости кода. Я должен точно знать семантику типа, чтобы адекватным образом его использовать в метода, например. И чтобы не получалось непоняток, когда я (на самом деле) модифицирую копию, а не переданный объект. А такое, как мы выяснили, и в шарпе возможно (см. мой первый пример).


                        Цитата IL_Agent @
                        Разницу между твоими примерами я объяснил. В одном случае объект не трогается, в другом - вызывается его метод. Строка - тоже reference.

                        Опять же. Непонятная семантика. Точнее, скрытая неоднозначность. Мне надо прикладывать определённые мозговые усилия, чтобы понять - к чему именно приведёт оператор присваивания.
                          Цитата Flex Ferrum @
                          Мне надо прикладывать определённые мозговые усилия, чтобы понять - к чему именно приведёт оператор присваивания.

                          Никаких усилий. Если ref - присваиваеися тот же самый объект, если value - копия. Мозговые усилия - это когда разбираешь код конструктора копирования / оператора присваивания.
                            Цитата IL_Agent @
                            Никаких усилий. Если ref - присваиваеися тот же самый объект, если value - копия. Мозговые усилия - это когда разбираешь код конструктора копирования / оператора присваивания.

                            Опаньки, а как это так? Оператор '=' и вызов метода Assign - эквивалентны или нет? Возьмём мой первый пример, и чуть-чуть подрихтуем:
                            ExpandedWrap disabled
                                    public void Foo(String str)
                                    {
                                       str.Assign("abcdef");
                                    }
                                    
                                    public void Bar()
                                    {
                                       String str = "cdefgh";
                                       Foo(str);
                                    };

                            Поведение волшебным образом изменится? И str в Bar поменяет своё состояние?
                            Сообщение отредактировано: Flex Ferrum -
                              Цитата IL_Agent @
                              Никаких усилий. Если ref - присваиваеися тот же самый объект, если value - копия.

                              Ну так и какую роль у тебя играет:
                              ExpandedWrap disabled
                                public void Foo(String str)

                              и
                              ExpandedWrap disabled
                                public void Foo(FooClass foo)

                              Почему одно изменится, другое нет? И где там написано ref/value ? :huh:
                              Сообщение отредактировано: KILLER -
                                Цитата Flex Ferrum @
                                Оператор '=' и вызов метода Assign - эквивалентны или нет?

                                В дотнете у стринга нет такого метода :) В любом случае,в C# вызов метода объекта никак не может быть эквивалентен оператору =.
                                Цитата Flex Ferrum @
                                Поведение волшебным образом изменится? И str в Bar поменяет своё состояние?

                                Ну и ? Обе переменные str осуществляют доступ к одному и тому же объекту до того, как мы одной из них не присвоим другой объект. В данном случае присваивания нет, зато есть обращение к этому самому объекту и изменение его состояния. Если допустить, что метод такой таки есть :)
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 194 195 [196] 197 198 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.2927 ]   [ 14 queries used ]   [ Generated: 1.08.26, 03:50 GMT ]