На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (78) « Первая ... 15 16 [17] 18 19 ...  77 78  ( Перейти к последнему сообщению )  
> Текущий Стандарт С++ и перспективы его развития
    Цитата Большой @
    Цитата archimed7592 @
    Едят с многопоточностью.

    а как ?
    мона небольшой пример.
    плизззз

    Вот и вот, прямо из кухни шеф-повара ;)
      Что-то в рабочем дравте не нашел Prohibited access specifier
      Значит не будет?
        Цитата Большой @
        Значит не будет?

        Видимо, не будет. Будут deleted определения.

        ExpandedWrap disabled
          struct X
          {
              X(X &) = delete;             // запрет на использование копирующего конструктора
              void operator =(X) = delete; // запрет на использование копирующего оператора присваивания
          };
          Masterkent
          а default, что значит?
            Большой, см первый пост, поиск по заголовку "Defaulted and Deleted Functions". Или у тебя более конкретный вопрос есть?
              archimed7592
              почитал совершенно непонятно. Единственное что понял, что default функции можно реализовывать как непосредственно в определении класса так и в не его.
              Возможно default значит, что компилятор должен использовать "свои" версии функций обычно реализованные компилятором если пользователь их не определяет. Или это значит что-то иное?
              Сообщение отредактировано: Большой -
                Большой, ну, к примеру, ты не хочешь модифицировать тело деструктора, но ты хочешь сделать его виртуальным:
                ExpandedWrap disabled
                  struct X
                  {
                      virtual ~X() = default;
                  }


                Цитата Большой @
                Возможно default значит, что компилятор должен использовать "свои" версии функций обычно реализованные компилятором если пользователь их не определяет.

                Дело в том, что если пользователь их не определяет, то компилятор и так воспользуется "своими" реализациями. Другое дело, когда пользователь их определяет - иногда, пользователю действительно необходимо определить свою версию деструктора(к примеру), но когда у него нет необходимости определять свой деструктор, а добавить виртуальность или изменить модификатор доступа(private/protected/public) хочется - тогда он может и сообщить компилятору о необходимых изменениях и оставить за компилятором реализацию по умолчанию.
                К примеру, если есть желание сделать конструктор копирования protected, то можно увидеть разницу в количестве кода и потенциальной ошибке при добавлении новых полей и НЕредактировании конструктора:
                ExpandedWrap disabled
                  // C++03
                  struct X : B1, B2, ..., Bn
                  {
                      T1 f1;
                      T2 f2;
                      // ...
                      Tn fn;
                   
                  protected:
                      X(const X &copy)
                          : B1(copy), B2(copy), ..., Bn(copy),
                            f1(copy.f1), f2(copy.f2), ..., fn(copy.fn)
                      { }
                  }
                   
                  // C++09
                  struct X : B1, B2, ..., Bn
                  {
                      T1 f1;
                      T2 f2;
                      // ...
                      Tn fn;
                   
                  protected:
                      X(const X &copy) = default;
                  }

                Заметь, при добавлении поля fn+1 или базового класса Bn+1 ничего редактировать в конструкторе не придётся.
                  archimed7592
                  все равно не понятно а не проще тогда вообще не писать конструктор копирования (в этом случае компилер создаст свой конструктор копирования, работающего по принципу побитового копирования )
                    Цитата Большой @
                    все равно не понятно а не проще тогда вообще не писать конструктор копирования (в этом случае компилер создаст свой конструктор копирования, работающего по принципу побитового копирования )

                    Во-первых, не побитового, а поэлементного, а во-вторых - нет, не проще, т. к. в данном случае (если ты обратишь внимание) требование - чтобы конструктор бы protected. А компилятор по умолчанию сгенерирует public. Понятна разница?
                      Цитата archimed7592 @
                      Большой, ну, к примеру, ты не хочешь модифицировать тело деструктора, но ты хочешь сделать его виртуальным:

                      с этим понятно, а с конструктором копий нет

                      Добавлено
                      Цитата Flex Ferrum @
                      Во-первых, не побитового, а поэлементного,

                      Саттер пишет что побитовое, а с конструктором копий понятно, не сразу обратил внимание на protected :)
                        Цитата Большой @
                        с этим понятно, а с конструктором копий нет

                        Нужно, чтобы "конструктор копий" был protected.
                        ExpandedWrap disabled
                          struct A
                          {
                          };
                           
                          struct B
                          {
                          protected:
                              B(const B &copy) = default;
                          };
                           
                          int main()
                          {
                              A a1;
                              A a2 = a1; // OK
                           
                              B b1;
                              B b2 = b1; // error
                          }

                        Понятно, что будет, если "вообще не писать конструктор копирования"?
                          А если попробовать так?

                          ExpandedWrap disabled
                            struct A
                            {
                            A(int _a) {}
                            A()=default;
                            };

                          будет работать?
                            Цитата Большой @
                            будет работать?

                            Что именно?
                              ну первый и второй конструктор
                              Сообщение отредактировано: Большой -
                                Ну да. Кстати говоря - вот тебе ещё одно применение default.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (78) « Первая ... 15 16 [17] 18 19 ...  77 78


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0730 ]   [ 16 queries used ]   [ Generated: 19.06.25, 03:50 GMT ]