Какая ваша любимая функция C++ 0x?

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

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

Итак, каких функций вы с нетерпением ждете?

Я думаю, что моей любимой особенностью C++ 0x является его комично неточное название.

JUST MY correct OPINION 04.07.2010 14:32
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
41
1
3 324
23
Перейти к ответу Данный вопрос помечен как решенный

Ответы 23

Ответ принят как подходящий

Ключевое слово авто для определения типа переменной

Мечтаю об авто. Когда доступно, я буду использовать его в каждом отдельном заявлении. Столько добра в 4 символах.

QBziZ 27.09.2008 00:33

Авто уже реализовано в GCC 4.4! И это круто.

coppro 20.10.2008 23:30

уууу! Больше не нужно гадать, сколько звездочек добавить к шрифту; )

Mark Cidade 21.10.2008 00:02

Ура авто! Больше никаких "for (vector <pair <int, string>> :: const_iterator i; ...."!

David Thornley 14.01.2009 00:50

ага .. забавно, насколько тривиальное изменение в C++ 0x является самым популярным. В конце концов, это является, о чем мы, программисты, заботимся :) и да, это круто.

Iraimbilanja 17.03.2009 18:43

For (int x: contanier) - это такая же вкусняшка. Надеюсь, он будет принят.

kyku 16.06.2009 22:24

Я боюсь. Не будет автоматически делать код более загадочным при чрезмерном использовании. не будет ли трудно прочитать код и понять, что это за переменные?

balki 01.07.2011 23:07

@balki может, но по моему опыту работы с другим языком с выводом типов, C#, я не обнаружил, что это большая проблема. Конечно, я использую Intellisense, но хорошо названные переменные и функции более полезны, чем явные имена типов.

Mark Cidade 03.07.2011 07:12

Нити и атомики.

Для многоядерных процессоров нормой C++ 0x должен был быть C++ 07.

ГРАММ.

Вот только этого не могло быть. Как стандарт ISO, он не может пересматриваться чаще одного раза в 10 лет. Итак, 10 октября 2008 года - самое раннее время, когда может быть установлен новый стандарт. Обратите внимание, что последняя встреча была в сентябре, ожидайте ратификации скорее раньше, чем позже.

Zathrus 30.10.2008 00:14

какие? Откуда у вас это правило? Комитет планирует делать более частые (~ 5-летние интервалы) обновления стандарта после 0x. И, конечно же, между C++ 98 и '03 меньше 10 лет.

jalf 25.06.2010 15:57

Списки лямбда-выражений и инициализаторов.

Кроме того, довольно интересными кажутся изменения, упрощающие в конечном итоге преобразование C++ в модель со сборкой мусора. Возможно, C++ 1x действительно внесет сборку мусора, но 0x / 10 просто настраивает на случай.

GC предотвращает RAII. Я бы предпочел умные указатели и RAII, чем GC.

Bernard Igiri 24.12.2008 18:55

О нет, это не так! RAII находится в Lisp, C#, хотя и немного отличается от C++, но C++ / CLI имеет деструкторы в GCed-классах, которые ведут себя идентично деструкторам C++.

Daniel Earwicker 27.03.2009 00:06

С ++ 0x находится в вашей базе, добавляя к вашим кодам. должен любить списки лямбда-выражений и инициализаторов.

user34537 22.02.2010 08:29

Закрытие для меня.

ключевое слово auto

юникод, многопоточность, hash_tables, умные указатели и регулярные выражения.

ps: Интересно, почему они просто не могут сделать обзор кода gr8 и принять все библиотеки boost и tr1 в стандарты и сделать жизнь проще для всех. Все, что им нужно будет решить, - это согласовать рабочую модель необязательной сборки мусора.

лямбда / замыкания не могут быть выполнены (эффективно) без языковой поддержки.

Simon Buchan 26.09.2008 09:06

Я бы не хотел навязывать что-то вроде Quaternions, GIL или BGL для всех поставщиков. Обзор кода в основном не имеет значения, поскольку стандарт описывает только интерфейсный контракт, который часто не указывается в boost. Boost опишет только его реализацию.

MSalters 26.09.2008 15:32

Мне нужны ссылки на Rvalues.

Все остальные новые функции - это то, без чего мы могли бы легко жить (увы, функции). Однако отсутствие Rvalue в C++ до сих пор привело к тому, что сотням авторов библиотек шаблонов пришлось «взламывать» проблему неработающей ссылки Rvalue.

Я полагаю, вы имеете в виду ссылки на rvalue, у нас уже есть rvalue

jk. 25.06.2010 14:44

Безусловно, концепции для меня. Но на втором месте списки инициализаторов, лямбды и вариативные шаблоны.

Жаль, что комитет решил не включать концепции в C++ 0x

David Lin 20.07.2009 04:48

На самом деле я рад, что его там нет. Мнение: Это было бы неприятным затруднением, которое не поняла бы даже половина комитета по C++.

sellibitze 18.09.2010 14:16

Я думаю, что большинство людей согласны с тем, что концепции были хорошей идеей, просто они не смогли быстро найти подходящую реализацию.

Greg Rogers 18.09.2010 18:05
  1. Это должно быть включение некоторых библиотек Boost (shared_ptr <> и привязка к началу списка)

  2. Контроль над установкой шаблонов должен, наконец, решить проблему огромного времени компиляции и сделать возможным использование современного кода шаблона в больших проектах.

  3. Типы шаблонов

Множество других мелких, но важных вещей, но они имеют значение в производственном коде.

Лямбды и Концепции

Я не могу выбрать между Тип нулевого указателя, Типы кортежей или Регулярное выражение. «Foreach» тоже там. Само собой разумеется, что "умные указатели" ... :-)

В принципе, очень жду обновления.

Лично я думаю, что интенсивное использование типа нулевого указателя приведет к появлению множества ошибок. Кортежи отлично подходят для работы с реляционными данными. Много крутых вещей.

Вариативные шаблоны! (Что в сочетании со ссылками на r-значение дает нам идеальную пересылку!)

Синтаксис становится все хуже и хуже.

Шаблоны с переменным числом аргументов и лямбда-выражения хороши, хотя синтаксис обоих, к сожалению, довольно сомнительный.

Умные указатели. Отсутствие явного управления памятью объектами, выделенными в куче, действительно имеет огромное значение.

Очевидно, вам все еще нужно «знать, что вы делаете», но, по моему опыту, это уменьшило количество ошибок, связанных с памятью, по крайней мере, на порядок в программном обеспечении, с которым я работал.

В моем коде уже были умные указатели от Boost. Меня больше интересуют изменения, которые я не могу сделать самостоятельно.

David Thornley 14.01.2009 00:52

В ПОРЯДКЕ. К вашему сведению, интеллектуальные указатели Boost являются основой интеллектуальных указателей C++ 0x.

Niklas 20.01.2009 16:23

Также shared_ptr был стандартизирован в TR1, поэтому на самом деле это не новость в C++ 0x.

Daniel Earwicker 27.03.2009 00:09

unique_ptr, хотя намного лучше, чем auto_ptr

jk. 28.10.2010 14:56

@Daniel Earwicker: TR1 не является стандартом. Это технический отчет с предложениями о том, что нужно включить в 0x. См. en.wikipedia.org/wiki/C%2B%2B_Technical_Report_1

Niklas 28.10.2010 18:17

Он не большой, но мне нравится идея настоящего nullptr. Должно было быть ключевое слово с самого начала.

это должно быть nullptr, не так ли

Jamie Cook 06.07.2010 16:53

Мне нравится constexpr, особенно в сочетании с вариативными шаблонами и определяемыми пользователем литералами, мы, наконец, можем получить двоичные литералы и множество других вкусностей.

obj.bitmask |= 00001010B; 

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

coppro 26.10.2008 21:02

Вы уверены, что? Я смотрел последнюю версию (N2378) и не видел этой информации.

Motti 30.10.2008 00:01

Да уж. Он находится в разделе требований к библиотеке под требованиями к программе.

coppro 03.11.2008 23:59

Сильно типизированные перечисления получить мой голос. У Паскаля они есть только около 40 лет, поэтому приятно видеть, что C++ наконец догоняет.

Однако публикация стандарта на самом деле не является событием. Гораздо важнее то, что функции, которые вы хотите использовать, на самом деле полностью и надежно поддерживаются реальными наборами инструментов. Есть люди, которым действительно нравится писать соответствующий стандартам код, который не может быть скомпилирован на любом известном компиляторе. Удачи им.

Внесение полезных вещей в стандарт увеличивает вероятность того, что они попадут в цепочки инструментов. Это начало.

David Thornley 14.01.2009 00:52

РЕГЕКС !! и библиотеки параллельного программирования, хотя я еще не знаю их всех возможностей.

Необработанные строковые литералы! Я думал, что строковые блоки в стиле питона - это круто, но я ошибался! В C++ 0x необработанные строковые литералы невероятно полезны для форматирования текста. Языки разметки можно писать прямо в исходнике!

Угловой кронштейн во вложенных объявлениях шаблонов.

Так что я смогу написать

std::vector<std::vector<int>> a;

вместо ужасного

std::vector<std::vector<int> > a;

decltype :-) и лямбды

на данный момент мне очень понравился C++ 0x, с которым я играл:

  • nullptr
  • static_assert
  • лямбды
  • shared_ptr и weak_ptr
  • unique_ptr
  • decltype и auto

Я не пробовал <regexp> ... Я подумал, что это отличная идея ... но я даже не удосужился взглянуть на нее.

Синтаксис итерации for (auto x : collection) - это круто, я думаю ... он буквально сокращает размер многих заголовков цикла в 4 или более раз (типы итераторов часто ... многословны)!

Это также означает, что вам не нужно разыменовать итератор в теле цикла (в традиционном цикле итератора вам всегда нужно использовать *i или i->... для получения значения элемента, но здесь вы можете просто использовать x), что в некоторых случаях делает код намного лучше.

Другие вопросы по теме