Как многие из нас знают (а многие, многие другие не знают), C++ в настоящее время находится на окончательной доработке следующей редакции Международного стандарта, которая, как ожидается, будет опубликована примерно через 2 года. Черновики и документы в настоящее время доступны в сайт комитета. Добавляются всевозможные новые функции, самые большие из которых - это концепции и лямбды. Существует очень подробный Статья в Википедии со многими новыми функциями. GCC 4.3 и более поздние версии реализуют некоторые особенности C++ 0x.
Что касается новых функций, мне очень нравятся черты типов (и соответствующие концепции), но мой безоговорочный лидер - это вариативные шаблоны. До 0x в длинных списках шаблонов обычно задействован препроцессор Boost, и писать их очень неприятно. Это значительно упрощает работу и позволяет рассматривать шаблоны C++ 0x как полностью функциональный язык с использованием вариативных шаблонов. Я уже написал с ними очень крутой код, и мне не терпится использовать их чаще!
Итак, каких функций вы с нетерпением ждете?





Ключевое слово авто для определения типа переменной
Мечтаю об авто. Когда доступно, я буду использовать его в каждом отдельном заявлении. Столько добра в 4 символах.
Авто уже реализовано в GCC 4.4! И это круто.
уууу! Больше не нужно гадать, сколько звездочек добавить к шрифту; )
Ура авто! Больше никаких "for (vector <pair <int, string>> :: const_iterator i; ...."!
ага .. забавно, насколько тривиальное изменение в C++ 0x является самым популярным. В конце концов, это является, о чем мы, программисты, заботимся :) и да, это круто.
For (int x: contanier) - это такая же вкусняшка. Надеюсь, он будет принят.
Я боюсь. Не будет автоматически делать код более загадочным при чрезмерном использовании. не будет ли трудно прочитать код и понять, что это за переменные?
@balki может, но по моему опыту работы с другим языком с выводом типов, C#, я не обнаружил, что это большая проблема. Конечно, я использую Intellisense, но хорошо названные переменные и функции более полезны, чем явные имена типов.
Нити и атомики.
Для многоядерных процессоров нормой C++ 0x должен был быть C++ 07.
ГРАММ.
Вот только этого не могло быть. Как стандарт ISO, он не может пересматриваться чаще одного раза в 10 лет. Итак, 10 октября 2008 года - самое раннее время, когда может быть установлен новый стандарт. Обратите внимание, что последняя встреча была в сентябре, ожидайте ратификации скорее раньше, чем позже.
какие? Откуда у вас это правило? Комитет планирует делать более частые (~ 5-летние интервалы) обновления стандарта после 0x. И, конечно же, между C++ 98 и '03 меньше 10 лет.
Списки лямбда-выражений и инициализаторов.
Кроме того, довольно интересными кажутся изменения, упрощающие в конечном итоге преобразование C++ в модель со сборкой мусора. Возможно, C++ 1x действительно внесет сборку мусора, но 0x / 10 просто настраивает на случай.
GC предотвращает RAII. Я бы предпочел умные указатели и RAII, чем GC.
О нет, это не так! RAII находится в Lisp, C#, хотя и немного отличается от C++, но C++ / CLI имеет деструкторы в GCed-классах, которые ведут себя идентично деструкторам C++.
С ++ 0x находится в вашей базе, добавляя к вашим кодам. должен любить списки лямбда-выражений и инициализаторов.
Закрытие для меня.
ключевое слово auto
юникод, многопоточность, hash_tables, умные указатели и регулярные выражения.
ps: Интересно, почему они просто не могут сделать обзор кода gr8 и принять все библиотеки boost и tr1 в стандарты и сделать жизнь проще для всех. Все, что им нужно будет решить, - это согласовать рабочую модель необязательной сборки мусора.
лямбда / замыкания не могут быть выполнены (эффективно) без языковой поддержки.
Я бы не хотел навязывать что-то вроде Quaternions, GIL или BGL для всех поставщиков. Обзор кода в основном не имеет значения, поскольку стандарт описывает только интерфейсный контракт, который часто не указывается в boost. Boost опишет только его реализацию.
Мне нужны ссылки на Rvalues.
Все остальные новые функции - это то, без чего мы могли бы легко жить (увы, функции). Однако отсутствие Rvalue в C++ до сих пор привело к тому, что сотням авторов библиотек шаблонов пришлось «взламывать» проблему неработающей ссылки Rvalue.
Я полагаю, вы имеете в виду ссылки на rvalue, у нас уже есть rvalue
Безусловно, концепции для меня. Но на втором месте списки инициализаторов, лямбды и вариативные шаблоны.
Жаль, что комитет решил не включать концепции в C++ 0x
На самом деле я рад, что его там нет. Мнение: Это было бы неприятным затруднением, которое не поняла бы даже половина комитета по C++.
Я думаю, что большинство людей согласны с тем, что концепции были хорошей идеей, просто они не смогли быстро найти подходящую реализацию.
Это должно быть включение некоторых библиотек Boost (shared_ptr <> и привязка к началу списка)
Контроль над установкой шаблонов должен, наконец, решить проблему огромного времени компиляции и сделать возможным использование современного кода шаблона в больших проектах.
Типы шаблонов
Множество других мелких, но важных вещей, но они имеют значение в производственном коде.
Лямбды и Концепции
Я не могу выбрать между Тип нулевого указателя, Типы кортежей или Регулярное выражение. «Foreach» тоже там. Само собой разумеется, что "умные указатели" ... :-)
В принципе, очень жду обновления.
Лично я думаю, что интенсивное использование типа нулевого указателя приведет к появлению множества ошибок. Кортежи отлично подходят для работы с реляционными данными. Много крутых вещей.
Вариативные шаблоны! (Что в сочетании со ссылками на r-значение дает нам идеальную пересылку!)
Синтаксис становится все хуже и хуже.
Шаблоны с переменным числом аргументов и лямбда-выражения хороши, хотя синтаксис обоих, к сожалению, довольно сомнительный.
Умные указатели. Отсутствие явного управления памятью объектами, выделенными в куче, действительно имеет огромное значение.
Очевидно, вам все еще нужно «знать, что вы делаете», но, по моему опыту, это уменьшило количество ошибок, связанных с памятью, по крайней мере, на порядок в программном обеспечении, с которым я работал.
В моем коде уже были умные указатели от Boost. Меня больше интересуют изменения, которые я не могу сделать самостоятельно.
В ПОРЯДКЕ. К вашему сведению, интеллектуальные указатели Boost являются основой интеллектуальных указателей C++ 0x.
Также shared_ptr был стандартизирован в TR1, поэтому на самом деле это не новость в C++ 0x.
unique_ptr, хотя намного лучше, чем auto_ptr
@Daniel Earwicker: TR1 не является стандартом. Это технический отчет с предложениями о том, что нужно включить в 0x. См. en.wikipedia.org/wiki/C%2B%2B_Technical_Report_1
Он не большой, но мне нравится идея настоящего nullptr. Должно было быть ключевое слово с самого начала.
это должно быть nullptr, не так ли
Мне нравится constexpr, особенно в сочетании с вариативными шаблонами и определяемыми пользователем литералами, мы, наконец, можем получить двоичные литералы и множество других вкусностей.
obj.bitmask |= 00001010B;
Вы должны начинать свои литералы с _ (литералы, отличные от _, зарезервированы для будущего использования в качестве стандарта). Какая жалость.
Вы уверены, что? Я смотрел последнюю версию (N2378) и не видел этой информации.
Да уж. Он находится в разделе требований к библиотеке под требованиями к программе.
Сильно типизированные перечисления получить мой голос. У Паскаля они есть только около 40 лет, поэтому приятно видеть, что C++ наконец догоняет.
Однако публикация стандарта на самом деле не является событием. Гораздо важнее то, что функции, которые вы хотите использовать, на самом деле полностью и надежно поддерживаются реальными наборами инструментов. Есть люди, которым действительно нравится писать соответствующий стандартам код, который не может быть скомпилирован на любом известном компиляторе. Удачи им.
Внесение полезных вещей в стандарт увеличивает вероятность того, что они попадут в цепочки инструментов. Это начало.
РЕГЕКС !! и библиотеки параллельного программирования, хотя я еще не знаю их всех возможностей.
Необработанные строковые литералы! Я думал, что строковые блоки в стиле питона - это круто, но я ошибался! В C++ 0x необработанные строковые литералы невероятно полезны для форматирования текста. Языки разметки можно писать прямо в исходнике!
Угловой кронштейн во вложенных объявлениях шаблонов.
Так что я смогу написать
std::vector<std::vector<int>> a;
вместо ужасного
std::vector<std::vector<int> > a;
на данный момент мне очень понравился C++ 0x, с которым я играл:
Я не пробовал <regexp> ... Я подумал, что это отличная идея ... но я даже не удосужился взглянуть на нее.
Синтаксис итерации for (auto x : collection) - это круто, я думаю ... он буквально сокращает размер многих заголовков цикла в 4 или более раз (типы итераторов часто ... многословны)!
Это также означает, что вам не нужно разыменовать итератор в теле цикла (в традиционном цикле итератора вам всегда нужно использовать *i или i->... для получения значения элемента, но здесь вы можете просто использовать x), что в некоторых случаях делает код намного лучше.
Я думаю, что моей любимой особенностью C++ 0x является его комично неточное название.