
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.21] |
![]() |
|
Страницы: (78) « Первая ... 7 8 [9] 10 11 ... 77 78 ( Перейти к последнему сообщению ) |
![]() |
Сообщ.
#122
,
|
|
Yeehhhaaaaaa! ![]() Цитата Flex Ferrum @ Также приняты в стандарт новый (альтернативный) формат объявления методов: [...] Т. е. позволяет задавать тип возвращаемого значения в конце объявления функции (что можно увидеть в приведенных выше фрагментах кода). Если честно в выше приведённых фрагментах этого не заметил, но, правильно ли я понимаю, что теперь запись ![]() ![]() SomeClassThatHaveVeryVeryLongName::SomeInternalType SomeClassThatHaveVeryVeryLongName::someMethod(...) { } ![]() ![]() SomeClassThatHaveVeryVeryLongName::someMethod(...) -> SomeInternalType Цитата Flex Ferrum @ Также позволили в объявлении функции использовать auto вместо типа возвращаемого значения. В этом случае тип функции был определен по типу возвращаемго значения в "самом последнем" операторе return. Прям не нарадуешься на новый Стандарт ![]() Добавлено Цитата Flex Ferrum @ Надеюсь, не первоапрельская. ![]() ![]() |
Сообщ.
#123
,
|
|
|
Цитата archimed7592 @ можно будет заменить чем-то вроде SomeClassThatHaveVeryVeryLongName::someMethod(...) -> SomeInternalType ?? Видимо, да. Либо на ![]() ![]() auto SomeClassThatHaveVeryVeryLongName::someMethod(...) {...} Добавлено Еще из интересных добавлений. Наследование конструкторов Т. е. можно будет писать: ![]() ![]() 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-пространства имен. ![]() ![]() 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 спецификаторов Думаю, в комментариях тоже не нуждается. ![]() ![]() Вложенные исключения В STL введен новый тип исключения - std::nested_exception, позволяющий оборачивать исключения одно в другое. |
Сообщ.
#124
,
|
|
|
Flex Ferrum
Цитата На последнем заседании комитета по стандартизации среди всего прочего в стандарт C++0x включили поддержку lambda-функций. Полное описание можно прочитать в статье. Вкратце, новый стандарт будет допускать следующий код: Вывод коллекции на консоль: ![]() ![]() // 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) ? Что они означают ? |
Сообщ.
#125
,
|
|
|
Цитата Cechmanek @ то за скобки [] перед (const Widget) ? Что они означают ? Означают то, что за ними располагается определение ламбда-функции. |
Сообщ.
#126
,
|
|
|
хм ... очень интересное решение.
|
Сообщ.
#127
,
|
|
|
Для желающих попробовать некоторые фишки стандарта уже сейчас, gcc 4.3 под винду можно залить отсюда:
http://www.tdragon.net/recentgcc/ |
Сообщ.
#128
,
|
|
|
Проверено. Работает.
![]() |
Сообщ.
#129
,
|
|
|
Текущее состояние предложений по изменениям в стандарте можно увидеть на этой странице:
State of C++ Evolution |
Сообщ.
#130
,
|
|
|
не хочется долго рыскать по незнакомым докам, потому тут спрошу
собираются в новом стандарте изменить STL в более удобную сторону (как в бусте) - к примеру добавить возможность передавать в алгоритмы весь контейнер (чтобы не писать кажжый раз xx.begin(), xx.end() и иметь возможность вложенных вызовов)? |
![]() |
Сообщ.
#131
,
|
|
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... |
![]() |
Сообщ.
#132
,
|
|
Ты считаешь, есть язык, не имеющий существенных огрехов? Я давно такой ищу... |
Сообщ.
#133
,
|
|
|
Нет я не считаю что языков без "огрехов" нет. Я считаю что комитет по стандартизации С++ занимается изобретением новых "закорлючек" вместо того чтобы исправить старые недостатики. Причем как раз эти "закрлючки" как раз и предназначены для обхода недостатков.
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 кода. |
Сообщ.
#134
,
|
|
|
Цитата FireZilla @ Из-за остутвия finally приходится использовать смарты, которые добавляют к программе лишних 100-200 КБ кода, даже если в принципе нет особой нужды в подсчете ссылок и т.п. Нет, это ![]() ![]() ![]() 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: ![]() ![]() using (OleDbDataReader r1 = null) { // ... using (OleDbDataReader r2 = null) { // ... } } Хорошо, если переменных - одна-две. А если их три-пять? Так что, за finally агитировать не надо. Цитата FireZilla @ А теперь про то что не попало в стандарт и слава богу - свойства. Имея дело с делфи я пришел к выводу что подобная практика фактически бесполезна. Свойства легко реализуются через сетеры и гетеры (т.е функции) которые к томуже могут быть автоматичики сгенерированны ИДЕ. Спорный тезис. Добавлено Цитата FireZilla @ IMHO Типы вроде int8_fast и т.д. не испрявят ситуацию когда я всеравно могу написать long и на разных процессорах это будет либо 16 либо 32 либо 64 бита. Или нам всем дружно взятся и перерефакторить миллионы строк кода. И что? Ситуаций, когда нужны типы фиксированной длины - не так много. Точнее, они ограничиваются только наличием требований бинарной совместимости (серелизация/десерелизация данных). Все! В остальных случаях совершенно побарабану - сколько именно места занимает int или long. ![]() |
![]() |
Сообщ.
#135
,
|
|
Цитата FireZilla @ вместо того чтобы исправить старые недостатики Смотря что понимать под исправлениями. Breaking changes - это не совсем исправления. При появлении таковых бунт устроит намного большее число пользователей языка С++, чем тех, кто агиттировал за эти изменения. Цитата FireZilla @ Или нам всем дружно взятся и перерефакторить миллионы строк кода. Рефакторить не хочешь, но хочешь "исправления" старого кода(а что его исправлять? Если он старый, то он либо работает, либо он никому не нужен не работающий). Цитата FireZilla @ И вообще почитай примеры кода которые ты сам выложил в первом посте, если говорить совершенно откровенно если вдуматся то обявления вроде Я вот смотрю на приводимые тобою примеры и совсем не понимаю, что ты ими показать пытаешься... |