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

    Надеюсь, не первоапрельская. :)
      Цитата Flex Ferrum @
      в стандарт C++0x включили поддержку lambda-функций.

      Yeehhhaaaaaa! :yes:



      Цитата Flex Ferrum @
      Также приняты в стандарт новый (альтернативный) формат объявления методов:
      [...]
      Т. е. позволяет задавать тип возвращаемого значения в конце объявления функции (что можно увидеть в приведенных выше фрагментах кода).

      Если честно в выше приведённых фрагментах этого не заметил, но, правильно ли я понимаю, что теперь запись
      ExpandedWrap disabled
        SomeClassThatHaveVeryVeryLongName::SomeInternalType SomeClassThatHaveVeryVeryLongName::someMethod(...)
        { }
      можно будет заменить чем-то вроде
      ExpandedWrap disabled
        SomeClassThatHaveVeryVeryLongName::someMethod(...) -> SomeInternalType
      ??



      Цитата Flex Ferrum @
      Также позволили в объявлении функции использовать auto вместо типа возвращаемого значения. В этом случае тип функции был определен по типу возвращаемго значения в "самом последнем" операторе return.

      Прям не нарадуешься на новый Стандарт :).

      Добавлено
      Цитата Flex Ferrum @
      Надеюсь, не первоапрельская. :)

      :lol:
        Цитата archimed7592 @
        можно будет заменить чем-то вроде

        SomeClassThatHaveVeryVeryLongName::someMethod(...) -> SomeInternalType

        ??

        Видимо, да. Либо на
        ExpandedWrap disabled
          auto SomeClassThatHaveVeryVeryLongName::someMethod(...) {...}


        Добавлено
        Еще из интересных добавлений.

        Наследование конструкторов
        Т. е. можно будет писать:
        ExpandedWrap disabled
          class Base
          {
          public:
             Base(T1, T2, T3, T4, T5, ...);
          };
           
          class Derived : public Base
          {
          public:
             using Base::Base; // Автоматически объявляет конструктор Derived::Derived(T1, T2, T3, T4, T5, ...);
          };


        inline-пространства имен.
        ExpandedWrap disabled
          namespace Lib
          {
            inline namespace Lib_1
            {
              template <typename T> class A;
            }
           
            template <typename T> void g(T);
          }
          ...
          struct MyClass { ... };
          namespace Lib
          {
            template<> class A<MyClass> { ... };
          }
           
          int main()
          {
            Lib::A<MyClass> a;
            g(a);  // ok, Lib is an associated namespace of A
          }

        Подробности здесь: http://www.open-std.org/jtc1/sc22/wg21/doc.../2008/n2535.htm

        В библиотеку STL добавлены односвязные списки
        (думаю, в пояснениях не нуждается)

        (не менее вкусное!!!)
        C членов union-ов сняты все ограничения кроме одного - они не могут быть ссылочного типа!!!!
        Иными словами, теперь в union'ах можно объявлять члены любого типа, в том числе имеющего нетривиальные конструкторы и деструкторы. Вся ответственность, понятное дело, лежит на программисте. Но, как написано в соответствующем proposal, "union'ы - они такие от рождения". :)
        Правда, в этом случае все методы, которые для классов могут быть автосгенерированы самим компилятором по новому стандарту обозначаются как deleted-члены. Таким образом, на программиста ложится работа по явному объявлению и определению конструкторов/деструкторов/операторов присваивания для такого рода объединений. Теперь создание вариантных типов становится задачей практически тривиальной... :)

        Ключевое слово auto окончательно разжаловано и из storage-class спецификаторов
        Думаю, в комментариях тоже не нуждается. :) auto переквалифицировалось в автоопределение типа... :)

        Вложенные исключения
        В STL введен новый тип исключения - std::nested_exception, позволяющий оборачивать исключения одно в другое.
          Flex Ferrum
          Цитата

          На последнем заседании комитета по стандартизации среди всего прочего в стандарт C++0x включили поддержку lambda-функций. Полное описание можно прочитать в статье. Вкратце, новый стандарт будет допускать следующий код:
          Вывод коллекции на консоль:

          ExpandedWrap disabled
            // Writing a collection to cout, in today's C++, option 2:
             
            copy( w.begin(), w.end(),
                      ostream_iterator<const Widget>( cout, " " ) );
             
             
            // Writing a collection to cout, in C++0x:
             
            for_each( w.begin(), w.end(),
                            []( const Widget& w ) { cout << w << " "; } );


          Что за скобки [] перед (const Widget) ? Что они означают ?
            Цитата Cechmanek @
            то за скобки [] перед (const Widget) ? Что они означают ?

            Означают то, что за ними располагается определение ламбда-функции.
              хм ... очень интересное решение.
                Для желающих попробовать некоторые фишки стандарта уже сейчас, gcc 4.3 под винду можно залить отсюда:
                http://www.tdragon.net/recentgcc/
                  Проверено. Работает. :)
                    Текущее состояние предложений по изменениям в стандарте можно увидеть на этой странице:
                    State of C++ Evolution
                      не хочется долго рыскать по незнакомым докам, потому тут спрошу
                      собираются в новом стандарте изменить STL в более удобную сторону (как в бусте) - к примеру добавить возможность передавать в алгоритмы весь контейнер (чтобы не писать кажжый раз xx.begin(), xx.end() и иметь возможность вложенных вызовов)?
                      Сообщение отредактировано: Alek86 -
                        Alek86
                        Library Evolution
                        Цитата

                        ...
                        New Language Support Planned for C++0x
                        These propsals take advantage of some new language feature, either voted into the Core Language or anticipated for the Final Candidate Document.
                        ...
                        N2245 Range Utilities for C++0x Thorsten Ottosen
                        ...

                        New Library Components Planned for a Future TR
                        These papers present libraries that are actively under consideration for a future TR. The Library Working Group is committed to an ongoing process of TRs, adopting libraries 'when they are ready'. As such, there is no target TR number associated with any given proposal.
                        ...
                        N1871 Range Library Proposal Thorsten Ottosen
                        N2068 Range Library Core Thorsten Ottosen
                        ...

                        В общем я так и не понял, то ли range в TR включат, то ли в 14883...
                          Цитата FireZilla @
                          Язык С++ имеет существенные огрехи

                          Ты считаешь, есть язык, не имеющий существенных огрехов? Я давно такой ищу...
                            Нет я не считаю что языков без "огрехов" нет. Я считаю что комитет по стандартизации С++ занимается изобретением новых "закорлючек" вместо того чтобы исправить старые недостатики. Причем как раз эти "закрлючки" как раз и предназначены для обхода недостатков.

                            IMHO Типы вроде int8_fast и т.д. не испрявят ситуацию когда я всеравно могу написать long и на разных процессорах это будет либо 16 либо 32 либо 64 бита. Или нам всем дружно взятся и перерефакторить миллионы строк кода.

                            И вообще почитай примеры кода которые ты сам выложил в первом посте, если говорить совершенно откровенно если вдуматся то обявления вроде

                            typedef X::value_type value_type;
                            void push(X& x, value_type value ) { x. push_back(value); }
                            void pop(X& x) { x. pop_back(); }
                            T top(const X& x) { return x.back(); }

                            Не так уж и далеко от Brainfuck кода.
                              Цитата FireZilla @
                              Из-за остутвия finally приходится использовать смарты, которые добавляют к программе лишних 100-200 КБ кода, даже если в принципе нет особой нужды в подсчете ссылок и т.п.

                              Нет, это :lool: . Трижды. Активно программируя на шарпе (где используется этот самый try-finally) и на С++ (где его нет), лучше все же в С++. Типичная конструкция в шарпе:
                              ExpandedWrap disabled
                                            OleDbDataReader r = null;
                                            try
                                            {
                                                OleDbCommand cmd = new OleDbCommand(check_sql, m_Connection);
                                 
                                                AddParameterInt(cmd, (int)ai.ID);
                                                r = cmd.ExecuteReader();
                                                if (r.Read())
                                                    UpdateIniniator(ai);
                                                else
                                                    InsertInitiator(ai);
                                            }
                                            finally
                                            {
                                                if (r != null)
                                                    r.Close();
                                            }

                              И так везде, где требуется контроль освобождения ресурсов при выходе из блока/функции. Или (о! небеса!) - использование для тех же целей using:
                              ExpandedWrap disabled
                                using (OleDbDataReader r1 = null)
                                {
                                   // ...
                                   using (OleDbDataReader r2 = null)
                                   {
                                      // ...
                                   }
                                }

                              Хорошо, если переменных - одна-две. А если их три-пять?
                              Так что, за finally агитировать не надо.

                              Цитата FireZilla @
                              А теперь про то что не попало в стандарт и слава богу - свойства. Имея дело с делфи я пришел к выводу что подобная практика фактически бесполезна. Свойства легко реализуются через сетеры и гетеры (т.е функции) которые к томуже могут быть автоматичики сгенерированны ИДЕ.

                              Спорный тезис.

                              Добавлено
                              Цитата FireZilla @
                              IMHO Типы вроде int8_fast и т.д. не испрявят ситуацию когда я всеравно могу написать long и на разных процессорах это будет либо 16 либо 32 либо 64 бита. Или нам всем дружно взятся и перерефакторить миллионы строк кода.

                              И что? Ситуаций, когда нужны типы фиксированной длины - не так много. Точнее, они ограничиваются только наличием требований бинарной совместимости (серелизация/десерелизация данных). Все! В остальных случаях совершенно побарабану - сколько именно места занимает int или long. :)
                                Цитата FireZilla @
                                вместо того чтобы исправить старые недостатики

                                Смотря что понимать под исправлениями. Breaking changes - это не совсем исправления. При появлении таковых бунт устроит намного большее число пользователей языка С++, чем тех, кто агиттировал за эти изменения.

                                Цитата FireZilla @
                                Или нам всем дружно взятся и перерефакторить миллионы строк кода.

                                Рефакторить не хочешь, но хочешь "исправления" старого кода(а что его исправлять? Если он старый, то он либо работает, либо он никому не нужен не работающий).

                                Цитата FireZilla @
                                И вообще почитай примеры кода которые ты сам выложил в первом посте, если говорить совершенно откровенно если вдуматся то обявления вроде

                                Я вот смотрю на приводимые тобою примеры и совсем не понимаю, что ты ими показать пытаешься...
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (78) « Первая ... 7 8 [9] 10 11 ...  77 78


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