На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (42) « Первая ... 2 3 [4] 5 6 ...  41 42  ( Перейти к последнему сообщению )  
> Инициализировать или не инициализировать , it's the question
    Цитата D_KEY @
    Почему она не приходит в голову? Виновата ли в этом инициализация?
    Потому что приходит мысль 'что-то задано и ладно'. Частично виновата. Сходу непонятно чем инициализировать: да, минимум говорит о некоем минимуме, но она могла бы называться и 'среднее' и ещё как-то, не связанное с крайними целыми значениями.
    Цитата D_KEY @
    Почему бы этой мысли так же не приходить в голову и в случае отсутствия инициализации?
    Ибо приходит мысль 'а чему равно значение переменной?'. Вопрос о правильности оного - чутка глубже.
    Цитата D_KEY @
    Не вижу в этом никакого гемора.
    Возможно, что я перебрал. Просто не вспоминаю случаев, где такое присваивание применялось. Всякие народные '-1' или миллион помню, а таких - нет. :blush:
      Мне кажется, что у вас что-то личное. Я, например, иначе воспринимаю и мысли у меня возникают совсем иные. Думаю, вы не сможете показать, что в отсутствии инициализации проблем, сходных с вашим примером, не возникает или что их возникает меньше.
        Цитата D_KEY @
        Мне кажется, что у вас что-то личное.
        Вы правы, чтобы у меня было что-то общественное - дико. :scratch:
        Цитата D_KEY @
        Думаю, вы не сможете показать, что в отсутствии инициализации проблем, сходных с вашим примером, не возникает или что их возникает меньше.
        Показать==доказать? Да, не смогу. Но я попытался привести схему тут:
        Цитата Славян @
        человек смотрит и видит, что что-то задано и мысль об инициализации пропадает, заменяется на 'всё тут хорошо'. А вот если бы её не было вообще, то вполне возможно, что мысль об инициализации родилась бы в нужном месте, а тогда бы и ошибка не возникла. Хотя, это была бы не инициализация, а правильное присвоение
          Цитата Славян @
          Цитата Славян @
          человек смотрит и видит, что что-то задано и мысль об инициализации пропадает, заменяется на 'всё тут хорошо'

          С точки зрения отсутствия мусора в переменной - действительно хорошо. А в остальном-то ничего не поменялось.

          Цитата
          А вот если бы её не было вообще, то вполне возможно, что мысль об инициализации родилась бы в нужном месте


          По мне так наоборот... Ибо квалификация такого человека под вопросом.
          Сообщение отредактировано: D_KEY -
            Цитата Славян @
            Потому что приходит мысль 'что-то задано и ладно'. Частично виновата.

            Это каким местом нужно думать, чтобы такая мысль пришла? Нормальные люди всегда приводят объект к нужному состоянию перед работой с ним. Нормальный человек, например, всегда задаст нужное начальное значение переменной перед её использованием в цикле и даже не станет смотреть, была ли «инициализация» где-то ранее или нет.
              Цитата D_KEY @
              Но лучше иметь зануленную память, чем мусор.
              В объекте не может быть мусора.
                Цитата Qraizer @
                Цитата D_KEY @
                Но лучше иметь зануленную память, чем мусор.
                В объекте не может быть мусора.

                В C++ может быть и мусор. Если ты забыл проинициализировать поля типов, для которых не будет вызван конструктор по умолчанию, если его явно не указать. Думаю, что ты об этом знаешь не хуже меня.
                  Цитата korvin @
                  Это каким местом нужно думать, чтобы такая мысль пришла?
                  Головой.
                  Цитата korvin @
                  Нормальные люди всегда приводят объект к нужному состоянию перед работой с ним.
                  Да, и это и отличает 'нормальных' людей, от KILLER'j-D_KEY'евских, жаждущих 'привести объект к ненужному, но начальному состоянию где-то в начале, а не пред работой с ним'. :yes-sad:
                    Во-первых, D_KEY, в объекте не может быть мусора. Во-вторых, ошибка и в конструкторе, и в инициализаторе одинаковым образом не сделает объект. В-третьих, в Плюсах конструктор по-умолчанию будет вызван всегда, если явно не указан или не подразумевается иной. В-четвёртых, не хуже тебя я знаю о том, что ты не упомянул, но я об этом и не говорил, будь внимательнее к цитируемым фрагментам.

                    P.S. Как я и предвидел, тема вышла за рамки исходного вопроса довольно быстро.
                      Цитата Славян @
                      В чистом Си - нельзя перенести объявление.

                      У изначального топиксартера плюсы вообще-то. Может ассемблер или брейнфак ещё приплетёшь сюда?
                      Цитата Славян @
                      Да, наверное можно, но выглядеть будет слишком чуждо, написанному там коду. И заставляет мучиться и выучивать всяческие максимумы, совершенно ненужные, вообще-то.

                      Это твои личные заморочки, а не объективный факт. Лично я в таком присваивании не вижу ничего необычного, да и "выучивать" это не потребуется.
                      Цитата Славян @
                      Для ясности я вам и расписал подробно как нужно было действовать и сие, более вероятно, привело бы к правильному результату.

                      С чего бы привело? Это:
                      Цитата Славян @
                      Мысль третья, не приходящая, опосля двух верхних:

                      обоснованием не является - нет причин с большей вероятностью прийти это мысли при отсутствии инициализации. В общем, D_KEY уже лучше расписал :D
                      Цитата Славян @
                      Да, и это и отличает 'нормальных' людей, от KILLER'j-D_KEY'евских, жаждущих 'привести объект к ненужному, но начальному состоянию где-то в начале, а не пред работой с ним'.

                      :fool: Про перенос инициализации двадцать раз говорилось. И нечего приплетать Си опять - см. выше причину.

                      Добавлено
                      Цитата Qraizer @
                      Во-вторых, ошибка и в конструкторе, и в инициализаторе одинаковым образом не сделает объект.

                      Я правильно понял, что ты объектом называешь только то, что сконструировано без ошибок, в том числе логических? Ведь в первом случае мы получим ... да ничего не получим, а во втором - объект с кривым значением полей.
                        Цитата Qraizer @
                        Во-первых, D_KEY, в объекте не может быть мусора.

                        ExpandedWrap disabled
                          class A {
                              int x;
                          public:
                              A()
                              {
                              }
                          };


                        В экземпляре такого класса может быть мусор.

                        Цитата
                        Во-вторых, ошибка и в конструкторе, и в инициализаторе одинаковым образом не сделает объект.

                        Это если мы используем исключения, умеем это делать и не сделали багу.

                        Цитата
                        в Плюсах конструктор по-умолчанию будет вызван всегда, если явно не указан или не подразумевается иной

                        Сравни:
                        ExpandedWrap disabled
                          class A {
                              int a;
                          public:
                              A()
                              {
                              }
                          };


                        И

                        ExpandedWrap disabled
                          class A {
                              int a;
                          public:
                              A()
                                  : a()
                              {
                              }
                          };
                          Цитата Славян @
                          Цитата korvin @
                          Нормальные люди всегда приводят объект к нужному состоянию перед работой с ним.
                          Да, и это и отличает 'нормальных' людей, от KILLER'j-D_KEY'евских

                          Это что еще такое? Выбирайте выражения.

                          Цитата
                          жаждущих 'привести объект к ненужному, но начальному состоянию где-то в начале, а не пред работой с ним'. :yes-sad:

                          В каком начале? Я по-моему на это уже многократно отвечал.
                            Цитата D_KEY @
                            В экземпляре такого класса может быть мусор.
                            Я не вижу там мусора.

                            Добавлено
                            Цитата OpenGL @
                            Я правильно понял, что ты объектом называешь только то, что сконструировано без ошибок, в том числе логических?
                            Объектом называется экземпляр класса, удовлетворяющим своим контрактам. Следовательно не удовлетворяющий своим контрактам экземпляр класса объектом не является. Всё просто. Однако речь не об этом, это D_KEY вдруг решил об этом поговорить.
                              Цитата Qraizer @
                              Цитата D_KEY @
                              В экземпляре такого класса может быть мусор.
                              Я не вижу там мусора.

                              А что ты там видишь?

                              Цитата
                              Цитата OpenGL @
                              Я правильно понял, что ты объектом называешь только то, что сконструировано без ошибок, в том числе логических?
                              Объектом называется экземпляр класса, удовлетворяющим своим контрактам. Следовательно не удовлетворяющий своим контрактам экземпляр класса объектом не является. Всё просто. Однако речь не об этом, это D_KEY вдруг решил об этом поговорить.

                              Речь об инициализации. Я сказал, что зануление переменных и полей класса лучше, чем оставления там мусора.

                              Добавлено
                              http://ideone.com/FdlSvg
                              ExpandedWrap disabled
                                #include <iostream>
                                using namespace std;
                                 
                                class A {
                                    int a;
                                public:
                                    A()
                                    {
                                    }
                                 
                                    int get_a() const
                                    {
                                        return a;
                                    }
                                 
                                    void set_a(int x)
                                    {
                                        a = x;
                                    }
                                };
                                 
                                int main() {
                                    // your code goes here
                                    for (int i = 0; i < 10; ++i) {
                                        A a;
                                        std::cout << a.get_a() << std::endl;
                                        a.set_a(i);
                                    }
                                    return 0;
                                }

                              ExpandedWrap disabled
                                1
                                0
                                1
                                2
                                3
                                4
                                5
                                6
                                7
                                8


                              Это не мусор? А что это?
                                Добавляем строку инициализации
                                ExpandedWrap disabled
                                  A()
                                      : a() // <---
                                  {
                                  }

                                И сравниваем
                                http://ideone.com/pyzJqN
                                ExpandedWrap disabled
                                  0
                                  0
                                  0
                                  0
                                  0
                                  0
                                  0
                                  0
                                  0
                                  0
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (42) « Первая ... 2 3 [4] 5 6 ...  41 42


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0580 ]   [ 15 queries used ]   [ Generated: 3.05.24, 10:45 GMT ]