Пространства имён
Варианты
Действия

История C++

Материал из cppreference.com
< cpp‎ | language
 
 
Язык С++
Общие темы
Управление потоком
Операторы условного выполнения
if
Операторы итерации (циклы)
Операторы перехода
Функции
Объявление функции
Выражение лямбда-функции
Спецификатор inline
Спецификации динамических исключений (до C++17*)
Спецификатор noexcept (C++11)
Исключения
Пространства имён
Типы
Спецификаторы
decltype (C++11)
auto (C++11)
alignas (C++11)
Спецификаторы длительности хранения
Инициализация
Выражения
Альтернативные представления
Литералы
Логические - Целочисленные - С плавающей запятой
Символьные - Строковые - nullptr (C++11)
Определяемые пользователем (C++11)
Утилиты
Атрибуты (C++11)
Types
Объявление typedef
Объявление псевдонима типа (C++11)
Casts
Неявные преобразования - Явные преобразования
static_cast - dynamic_cast
const_cast - reinterpret_cast
Выделение памяти
Классы
Свойства функции класса
explicit (C++11)
static
Специальные функции-элементы
Шаблоны
Разное
История C++
 

Содержание

[править] Ранний C++

  • 1979: Впервые реализован C с Классами
  1. Новые возможности: классы, функции-элементы, производные классы, раздельная компиляция, public и private контроль доступа, friend, проверка типов аргументов функции, аргументы по умолчанию, inline функции, перегруженный оператор присваивания, конструкторы, деструкторы, f() то же, что и f(void), функция call и функция return (функции синхронизации, которых нет в C++)
  2. Библиотеки: библиотека параллельных задач (нет в C++)
  • 1982: Опубликовано справочное руководство по C с Классами
  • 1984: Реализован C84, опубликовано справочное руководство
  • 1985: Cfront 1.0
  1. Новые возможности: виртуальные функции, перегрузка операторов и функций, ссылки, операторы new и delete, ключевое слово const, оператор разрешения области видимости
  2. Дополнения библиотеки: комплексное число, строка, потоки Ввода/Вывода
  • 1985: Язык Программирования C++, 1-е издание
  • 1986: Документ "что это?", документирующий оставшиеся задачи дизайна, включая множественное наследование, обработку исключений и шаблоны.
  • 1987: Поддержка C++ в GCC 1.15.3
  • 1989: Cfront 2.0
  1. Новые возможности: множественное наследование, указатели на элементы, защищённый доступ, типобезопасное связывание, абстрактные классы, статические и константные функции-элементы, специфичные для класса new и delete
  2. Дополнения библиотеки: манипуляторы Ввода/Вывода
  • 1990: Справочное Руководство по C++ с аннотациями

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

  1. Новые возможности: простоанства имён, обработка исключений, вложенные классы, шаблоны
  • 1991: Cfront 3.0
  • 1991: Язык Программирования C++, 2-е издание

[править] Стандартизованный C++

  • 1990: Основание комитета ANSI C++
  • 1991: Основание комитета ISO C++
  • 1992: В C++ реализована STL

[править] Период C++98/03

  • 1998: C++98 (ISO/IEC 14882:1998)
  1. Новые возможности: RTTI (dynamic_cast, typeid), ковариантные возвращаемые типы, операторы приведения, mutable, bool, объявления в условиях, создание экземпляров шаблонов, шаблоны элементов, export
  2. Дополнения к библиотеке: локали, bitset, valarray, auto_ptr, шаблон string, iostream и complex.
  3. На основе STL: контейнеры, алгоритмы, итераторы, объекты функции
  • 1998: Язык Программирования C++, 3-е издание
  • 1999: Члены комитета основали Boost для создания новых высококачественных библиотек-кандидатов для стандартизации.
  • 2003: C++03 (ISO/IEC 14882:2003)

Это была небольшая доработка, призванная стать не более чем техническим исправлением

  1. Новые возможности: инициализация значения
Отчёты о Дефектах, исправленные в C++03 (92 ядро, 125 библиотека)

В этом ТЗ обсуждается стоимость различных абстракций C++, приводится руководство по реализации, обсуждается использование C++ во встроенных системах и представлен <hardware> интерфейс к ISO/IEC TR 18037:2008 языка C <iohw.h>.

Это TR является расширением библиотеки C++, которое добавляет в стандартную библиотеку C++ следующее:

  1. Из Boost: Обёртка для ссылки, Умные указатели, mem_fn, result_of, bind, function, Свойства Типов, Случайность, Специальные математические функции, tuple, array, Неупорядоченные Контейнеры (включая hash) и Регулярные Выражения.
  2. Из C99: математические функции из math.h, которые были новыми в C99, пустой тип символов, Среда с плавающей точкой, шестнадцатеричный Манипулятор Ввода-Вывода с плавающей запятой, целочисленные типы фиксированного размера, тип long long, va_copy, семейства функций snprintf() и vfscanf(), и C99 спецификаторы преобразования для семейств функций printf() и scanf().

Всё TR1, за исключением специальных функций, было включено в C++11 с небольшими изменениями.

Этот международный стандарт является расширением стандартной библиотеки C++, которое добавляет специальные функции, которые были частью TR1, но не были включены в C++11: эллиптические интегралы, экспоненциальный интеграл, многочлены Лагерра, многочлены Лежандра, многочлены Эрмита, функции Бесселя, функции Неймана, бета-функция и дзета-функция Римана. Этот стандарт был объединён с C++17.

[править] Период C++11

Основной Предмет: C++11

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

Это TR реализует десятичные типы с плавающей запятой из стандарта IEEE 754-2008 для Арифметики с Плавающей Запятой: std::decimal::decimal32, std::decimal::decimal64 и std::decimal::decimal128.

[править] Период C++14

Основной Предмет: C++14

Незначительная доработка стандарта C++

Эта ТС является экспериментальным расширением библиотеки C++, которое определяет библиотеку файловой системы на основе boost.filesystem V3 (с некоторыми модификациями и расширениями). Эта ТС была объединена с C++17.

Эта ТС стандартизирует параллельный и векторно-параллельный API для всех стандартных библиотечных алгоритмов, а также добавляет новые алгоритмы, такие как reduce, transform_reduce или exclusive_scan. Эта ТС была объединена с C++17.

Эта ТС расширяет базовый язык C++ синхронизированными и атомарными блоками, а также функциями безопасными для транзакций, которые реализуют семантику транзакционной памяти.

Эта ТС добавляет несколько новых компонентов в стандартную библиотеку C++: optional, any, string_view, sample, search, apply, полиморфные аллокаторы и шаблоны переменных для свойств типов. Эта ТС была объединена с C++17.

Эта ТС расширяет базовый язык C++ концептами (требования к именованным типам) и ограничениями (ограничения на типы, разрешённые в объявлениях шаблонов, функций и переменных), что помогает метапрограммированию и упрощает диагностику создания экземпляров шаблона, смотрите концепты. Эта ТС была объединена с C++20, с некоторыми ограничениями.

Эта ТС расширяет библиотеку C++ и включает несколько расширений: std::future, защёлки и барьеры, а также атомарные умные указатели.

[править] Период C++17

Основной Предмет: C++17

Основная версия стандарта C++ после C++11

Эта ТС расширяет библиотеку C++ и включает диапазоны, новую, более мощную абстракцию, заменяющую пары итераторов, а также представления диапазонов, ограничители диапазонов, проекции для преобразований на лету, новые адаптеры и алгоритмы итераторов. Это расширение, наконец, позволяет сортировать вектор с помощью sort(v);

Эта ТС расширяет базовый язык C++ и стандартную библиотеку за счёт включения бесстековых сопрограмм (возобновляемых функций). Она добавляет ключевые слова co_await, co_yield и co_return.

Эта ТС расширяет библиотеку C++ и включает сеть TCP/IP на основе boost.asio.

Эта ТС расширяет базовый язык C++ за счёт включения модулей. Она добавляет специальные идентификаторы module, import и повторно вводит ключевое слово export с новым смыслом.

Эта ТС расширяет библиотеку C++ и включает две новые политики выполнения (unseq и vec), дополнительные параллельные алгоритмы, такие как reduction_plus или for_loop_strided, блоки задач для разветвления и объединения параллельных задач, типы SIMD и операции над этими типами.

[править] Период C++20

Основной Предмет: C++20

Основная редакция стандарта C++ после C++17

Это ТС расширяет C++ средствами для проверки программных сущностей, таких как переменные, перечисления, классы и их элементы, лямбды и их захваты и т.д.

[править] Дальнейшее развитие

Основной Предмет: C++23

Следующая крупная версия стандарта C++

[править] Смотрите также

Документация C по истории C

[править] Внешние ссылки

  История C++: 1979-1991
  Развитие языка в реальном мире и для него: C++ 1991-2006
  Процветание в многолюдном и меняющемся мире: C++ 2006-2020
  Стандартная основа C++
  C++ в Википедии
  Комитет по Стандартам C++