]]> ]]>

C++11

Диалект языка программирования C++

C++11 (до утверждения известный как C++0x) — последняя версия стандарта языка C++, принятая в августе 2011 года и опубликованная в сентябре в документе ISO/IEC 14882:2011. C++11 заменит предыдущий стандарт, C++03.

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

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

Изменения, затронувшие основу языка:

  • добавлены ссылки на временные значения (rvalues — значения на правой стороне присвоения), позволяющие изменять такие значения после их инициализации, и конструкторы переноса.
  • добавлены обобщенные константные выражения, основанные на использовании ключевого слова constexpr; это слово указывает на то, что функция всегда возвращает значение-константу, и позволяет использовать такую функцию в том же контексте, что и константу.
  • определение типа простых данных (plain old data) разбито на два — тривиальный тип (позволяющий статическую инициализацию и использование memcpy) и тип стандартного размещения (порядок его членов совместим с порядком C). Это позволяет более точно задавать границы совместимости типа с C.
  • введено понятие внешнего шаблона — способа запретить компилятору инстанцировать (создавать экземпляр класса) шаблон.
  • расширены возможности использования списков инициализации при помощи введения шаблона std::initializer_list.
  • введена единая форма инициализации любых объектов.
  • добавлены возможности вывода типов: переменные, инициализирующиеся при объявлении, могут быть объявлены как auto, а ключевое слово decltype позволяет определять тип переменной на этапе компиляции.
  • добавлен синтаксис цикла типа foreach для итерирования по элементам коллекции.
  • добавлены анонимные лямбда-функции.
  • добавлен новый синтаксис объявления шаблонов функций, с указанием типа возвращаемого значения после перечисления аргументов функции.
  • конструкторы класса могут вызывать другие конструкторы этого же класса, как в Java, C# и D. Объект считается созданным, как только отработал хотя бы один конструктор.
  • добавлена возможность явного указания того, что функция замещает одноименную родительского класса (ключевое слово override), и того, что функция не может замещаться другой в классе-потомке (ключевое слово final).
  • новое ключевое слово nullptr — нулевой указатель.
  • строго типизированные перечисления enum class.
  • изменение спецификации парсера так, что >> интерпретируется как пара закрывающих скобок, а не как оператор правого сдвига.
  • ключевое слово explicit применимо и к операторам преобразования типов (во избежание неявных преобразований).
  • синонимы шаблонов.
  • убраны некоторые ограничения на то, объекты каких типов могут входить в union.
  • разрешены шаблоны с переменным количеством параметров.
  • поддержка трех новых типов строковых констант: UTF-8 (u8"..."), UTF-16 (u"...") и UTF-32 (U"...").
  • пользовательские константы (возможность трактовать запись как константу некоторого типа в зависимости от ее суффикса).
  • многопоточная модель памяти.
  • хранение данных, локальных для потока.
  • тип long long int.
  • статические проверки static_assert.
  • sizeof может работать с членами классов без объектов этого класса.
  • добавлена возможность управления размещением переменных.
  • убраны некоторые сценарии, которые делали невозможным реализацию автоматической сборки мусора.

Изменения библиотеки STL:

  • поддержка многопоточности (классы потоков, мьютексов, условных переменных, блокировок и т.д.).
  • кортежи (tuple) — коллекции разнородных объектов заданных размерностей.
  • хеш-таблицы (неупорядоченные ассоциативные контейнеры) unordered_set, unordered_multiset, unordered_map и unordered_multimap.
  • библиотека регулярных выражений <regex>.
  • “умные” указатели общего назначения: добавлен unique_ptr и улучшены shared_ptr​ и ​weak_ptr, auto_ptr исключен как устаревший.
  • расширенные возможности генерации случайных чисел.

Комментарии

]]>

blog comments powered by Disqus

]]>

Работа программистам