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

    Скорее для тех, кто ленится прочитать уже не один раз написанное(в этой теме).
    Ок. Было:
    ExpandedWrap disabled
      SomeNamespace::WithInnerNamespace::SomeVeryLongTypeName *obj = new SomeNamespace::WithInnerNamespace::SomeVeryLongTypeName();

    Стало:
    ExpandedWrap disabled
      auto *obj = new SomeNamespace::WithInnerNamespace::SomeVeryLongTypeName();

    Это, на самом деле, самый примитивный случай.
    Более интересные ситуации не решаемы копипастом.
    Сообщение отредактировано: archimed7592 -
      В-общем, auto позволит в некоторых случаях сократить количество набиваемых символов, вместо
      ExpandedWrap disabled
        &
        for (std::vector<SomeType>::iterator i = myvector.begin(); i != myvector.end(); ++i) {
          ...
        }
      можно будет написать более короткое
      ExpandedWrap disabled
        for (auto i = myvector.begin(); i != myvector.end(); ++i) {
          ...
        }
      А какого еще типа может быть i?

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

      ИМХО, очень полезное изменение.
        Вот один из очень таких интересных случаев:
        ExpandedWrap disabled
          #include <complex>
           
          template <typename L, typename R>
          std::complex<decltype(L()+R())> operator+(const std::complex<L>& l, const std::complex<R>& r)
          {
           auto re = l.real()+r.real();
           auto im = l.imag()+r.imag();
           
           return std::complex<decltype(re)>(re, im);
          }
        Сообщение отредактировано: Qraizer -
          А пересылку в шаблонах можно будет делать?
          Если упрощенно, то что-нибудь такое:
          ExpandedWrap disabled
            template< typename T >
            class A {
            public:
                auto f()
                {
                    return a.g();
                }
             
            private:
                T a;
             
            }; // class A

          А то сейчас подобного поведения добиться вообще никак нельзя(или я пока слабоват в метапрограмминге).
            Одно из предполагаемых предназначений auto - определение типа результата функции на основании типа аргумента return. Правда неясен вопрос с несколькими return в функции, из-за чего эта возможность может быть и не включена.
              Цитата trainer @
              Правда неясен вопрос с несколькими return в функции, из-за чего эта возможность может быть и не включена.

              Вполне может разруливаться путем ошибки компиляции. Т. е. компилятор потребует от программиста привести все return'ы к одному типу.
                Цитата Flex Ferrum @
                Т. е. компилятор потребует от программиста привести все return'ы к одному типу.

                Возможно и менее строгое требование - существование общего типа, как у операндов тернарного оператора

                ExpandedWrap disabled
                  auto f(bool b)
                  {
                      if (b)
                          return 1;
                      else
                          return 2.5;
                   
                      // поведение аналогично return b ? 1 : 2.5;
                  }
                  Правда чтобы воспользоваться таким определением нужно видеть тело функции, то есть практически только для определения inline-функций и шаблонных.
                    Цитата Dantes @
                    Цитата Flex Ferrum @
                    Т. е. компилятор потребует от программиста привести все return'ы к одному типу.

                    Возможно и менее строгое требование - существование общего типа, как у операндов тернарного оператора

                    ExpandedWrap disabled
                      auto f(bool b)
                      {
                          if (b)
                              return 1;
                          else
                              return 2.5;
                       
                          // поведение аналогично return b ? 1 : 2.5;
                      }

                    Тип результата тернарного оператора определяется не "общем типом"(что это, кстати?), а типом последнего варианта...
                      Цитата D_KEY @
                      Тип результата тернарного оператора определяется не "общем типом"(что это, кстати?), а типом последнего варианта...

                      Тип его результата определяется правилами в пункте 5.16 стандарта. В стандарте нет термина common type, но такое словосочетание там присутствует, и что оно означает, по-моему, вполне очевидно.
                        Да... Язык скатывается в яму маразма. Количества правил, крючков и их сочетаний увеличивается. Ясность чтения уменьшается.
                          Цитата slavik_xxx @
                          Да... Язык скатывается в яму маразма. Количества правил, крючков и их сочетаний увеличивается. Ясность чтения уменьшается.

                          Фразы такого рода преследуют С++ с рождения ;) .
                          На мой взгляд язык становится даже проще в использовании и логичнее, а возможности его возрастают.
                          А если тебе не ясны какие-то "крючки" и "их сочетания" ты можешь их не использовать. "Что не использую, за то не плачу"...
                            Цитата D_KEY @
                            "Что не использую, за то не плачу"...


                            с позиции практики, а с позиции теории. Ведь студентам тогда придется учить еще больше
                              Цитата Большой @
                              с позиции практики, а с позиции теории. Ведь студентам тогда придется учить еще больше

                              Хм. Боюсь, типичный студент несколько, гм, слабоват для изучения "теории" С++. По этому "больше" ему учить не придется.
                                Меня просто радует вот эта фича

                                ExpandedWrap disabled
                                  auto func(int x) -> double {return pow(x);}


                                т.е если раньше стандартом запрещено было создавать две функции с одинаковыми сигнатурами
                                ExpandedWrap disabled
                                  int func(int x);
                                  double func(int x);

                                так теперь все норма компилер сам будет соображать с auto(ну если компилер совсем будет слаб то ему подсунем, что тип возращаемого значения желательно double, наверное как и с inline он еще подумает делать его double или лучше int)
                                Интересно в новом стандарте эти 2 функции будут с разными сигнатурами или нет?
                                Сообщение отредактировано: Большой -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (78) « Первая ... 12 13 [14] 15 16 ...  77 78


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0552 ]   [ 16 queries used ]   [ Generated: 18.06.25, 16:21 GMT ]