На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (14) « Первая ... 8 9 [10] 11 12 ... Последняя » все  ( Перейти к последнему сообщению )  
> Классы в СИ++ , нужна консультация
    Ой, Киля - каким ты был - таким и остался! :D
      shm, оно?
      Цитата

      Initialization shall proceed in the following order:
      — First, and only for the constructor of the most derived class as described below, virtual base classes shall be
      initialized in the order they appear on a depth-first left-to-right traversal of the directed acyclic graph of base
      classes, where “left-to-right” is the order of appearance of the base class names in the derived class base-specifierlist.
      — Then, direct base classes shall be initialized in declaration order as they appear in the base-specifier-list (regardless
      of the order of the mem-initializers).
      — Then, non-static data members shall be initialized in the order they were declared in the class definition (again
      regardless of the order of the mem-initializers).
      — Finally, the body of the constructor is executed.


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

      Добавлено
      Цитата KILLER @
      Then, non-static data members shall be initialized in the order they were declared in the class definition

      Ну вот - оно ?
      Сообщение отредактировано: Qraizer -
        Цитата
        — Then, direct base classes shall be initialized in declaration order as they appear in the base-specifier-list (regardless
        of the order of the mem-initializers
        ).
        — Then, non-static data members shall be initialized in the order they were declared in the class definition (again
        regardless of the order of the mem-initializers
        ).

        Вот оно. Вопросы еще будут?

        Добавлено
        Цитата KILLER @
        Ну вот - оно ?

        Да. А я разве не так сказал?
        Сообщение отредактировано: shm -
          Цитата shm @
          Вот оно. Вопросы еще будут?

          Погоди, погоди. Во первых, что такое:
          Цитата shm @
          mem-initializers

          Во вторых, то что ты процитировал - Как я понял:
          "Базовые классы должны быть инициализированы в том порядке в каком они определены в списке базового класса спецификатора(согласно порядку mem-initializers). Тут про базовые классы речь идет. Так что нифига подобного, будут вопросы.

          Добавлено
          Цитата shm @
          Да. А я разве не так сказал?

          Нет, это я тебе так сказал, там пишут что:
          Цитата KILLER @
          Then, non-static data members shall be initialized in the order they were declared in the class definition

          Нестатические члены класса должны быть инициализированы в том порядке, в котором они объявлены в классе.

          Или я не верно перевел?
            Цитата KILLER @
            что такое

            Цитата
            In the definition of a constructor for a class, initializers for
            direct and virtual base subobjects and nonstatic data members can be
            specified by a ctor-initializer, which has the form
            ctor-initializer:
            : mem-initializer-list
            mem-initializer-list:
            mem-initializer
            mem-initializer , mem-initializer-list
            mem-initializer:
            mem-initializer-id ( expression-listopt )
            mem-initializer-id:
            ::opt nested-name-specifieropt class-name
            identifier
            Сообщение отредактировано: shm -
              Т.е. другими словами "Нестатические члены класса должны быть инициализированы в том порядке, в каком ты их объявил в своем классе" - это именно то, что я тебе распедаливал 3 или 4 страницы.
                Цитата KILLER @
                это именно то, что я тебе распедаливал 3 или 4 страницы.

                Идем к моей первой цитате.
                Цитата shm @
                ЕМНИП, объекты инициализируются в том порядке, в каком они объявлены в классе, при этом порядок их перечисления в конструкторе не имеет значения. Вот от этого все и грабли.
                  Цитата shm @
                  In the definition of a constructor for a class, initializers for
                  direct and virtual base subobjects and nonstatic data members can be
                  specified by a ctor-initializer, which has the form
                  ctor-initializer:
                  : mem-initializer-list
                  mem-initializer-list:
                  mem-initializer
                  mem-initializer , mem-initializer-list
                  mem-initializer:
                  mem-initializer-id ( expression-listopt )
                  mem-initializer-id:
                  ::opt nested-name-specifieropt class-name
                  identifier

                  А, ну все я понял. Ну так mem-initializer - Это и есть инициализация мемберов класса, либо в теле конструктора, либо в списке инициализации.
                    И почему ты тогда что-то гнал на мои примеры, раз тебе всегда было это ясно?
                      Цитата shm @
                      Идем к моей первой цитате.

                      Идем к моей цитате, которая цитирует твою:
                      Цитата KILLER @
                      Цитата
                      ЕМНИП, объекты инициализируются в том порядке, в каком они объявлены в классе, при этом порядок их перечисления в конструкторе не имеет значения.


                      В самом теле конструктора - да, не имеет. Я имею ввиду список инициализации, ЕМНИП там порядок объявления членов класса - важен.


                      Добавлено
                      Цитата shm @
                      И почему ты тогда что-то гнал на мои примеры, раз тебе всегда было это ясно?

                      Потому что ты нарушаешь стандарт. Ты пытаешься инициализировать переменную тем, что еще не создано.
                        Цитата KILLER @
                        Ты пытаешься инициализировать переменную тем, что еще не создано.

                        Где?
                          Цитата shm @
                          Где?

                          В твоем примере, вот тут - https://ideone.com/JzSCsY
                            Пример процитируй с выделением этого места.
                              Цитата shm @
                              Пример процитируй с выделением этого места.

                              Сорь, я не ту ссылку скопировал, третья вроде твоя ссылка:
                              ExpandedWrap disabled
                                    #include <iostream>
                                    using namespace std;
                                    
                                    class A
                                    {
                                    int b;
                                    int a;
                                    public:
                                    A(int val) :
                                    a(b), //! Вот тута ты инициализируешь член класса a, неициализированным членом b
                                    b(val)
                                    {
                                    }
                                    void print()
                                    {
                                    std::cout << a << ' ' << b;
                                    }
                                    };
                                    
                                    int main() {
                                    A a(123);
                                    a.print();
                                    return 0;
                                    }
                              Сообщение отредактировано: KILLER -
                                Тут - да. Это первый пример.
                                Цитата shm @
                                Вот самый простой пример, когда важен:

                                Цитата shm @
                                корректен только второй вариант.

                                Цитата shm @
                                Так тоже корректно:

                                он же третий.
                                Тогда почему ты не можешь внятно ответить про вывод? Киля просто признайся, что ты был не прав и все. Выглядишь сейчас смешно.

                                Добавлено
                                Цитата KILLER @
                                a(b), //! Вот тута ты инициализируешь член класса a, неициализированным членом b
                                b(val)

                                Киля, ты вбей в гугл трайнслейт то, что я выделил жирным шрифтом в моей первой цитате Стандарта.
                                Сообщение отредактировано: shm -
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0514 ]   [ 14 queries used ]   [ Generated: 18.05.24, 15:13 GMT ]