Namespaces
Variants

History of C++

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous
History of C++

Содержание

Ранний C++

  • 1979: C with Classes впервые реализован
  1. Новые возможности: classes , member functions , derived classes , раздельная компиляция, public and private access control , friends , проверка типов аргументов функций, default arguments , inline functions , overloaded assignment operator , constructors , destructors , f ( ) эквивалентно f ( void ) , функции call и return (функции синхронизации, отсутствуют в C++)
  2. Библиотеки: библиотека параллельных задач (отсутствует в C++)
  • 1982: Справочное руководство по C with Classes опубликовано
  • 1984: C84 реализован, справочное руководство опубликовано
  • 1985: Cfront 1.0
  1. Новые возможности: виртуальные функции , перегрузка функций и операторов , ссылки , new и delete операторы, ключевое слово const , оператор разрешения области видимости
  2. Добавления в библиотеку: комплексные числа , string (версия AT&T), потоки ввода-вывода
  • 1985: Язык программирования C++, 1-е издание
  • 1986: Документ "whatis?" с описанием оставшихся целей проектирования, включая множественное наследование, обработку исключений и шаблоны.
  • 1987: Поддержка C++ в GCC 1.15.3
  • 1989: Cfront 2.0
  1. Новые возможности: множественное наследование , указатели на члены , защищённый доступ , типобезопасная компоновка, абстрактные классы , статические и константно-квалифицированные функции-члены, специализированные для класса new и delete
  2. Добавления в библиотеку: манипуляторы ввода-вывода
  • 1990: Аннотированное руководство по C++

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

  1. Новые возможности: namespaces , exception handling , nested classes , templates
  • 1991: Cfront 3.0
  • 1991: Язык программирования C++, 2-е издание

Стандартный C++

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

Период C++98/03

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

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

Отчёты об ошибках, исправленные в C++03 (92 ядра, 125 библиотек)
  • 2006: Технический отчет по производительности (ISO/IEC TR 18015:2006) ( ISO Store ) ( 2006 draft )

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

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

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

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

  • 2010: Математические специальные функции (ISO/IEC 29124:2010) ( ISO Store ) ( 2010 draft )

Этот международный стандарт представляет собой расширение стандартной библиотеки C++, которое добавляет специальные функции, входившие в TR1, но не включённые в C++11: elliptic integrals, exponential integral, Laguerre polynomials, Legendre polynomials, Hermite polynomials, Bessel functions, Neumann functions, beta function и Riemann zeta function. Данный стандарт был объединён с C++17 .

Период C++11

Основная статья: C++11

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

  • 2011: Технический отчет по десятичной арифметике с плавающей запятой (ISO/IEC TR 24733:2011) ( ISO Store ) ( 2009 draft )

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

Период C++14

Основная статья: C++14

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

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

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

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

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

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

Данный TS расширяет библиотеку C++, включая несколько расширений для std::future , latches и barriers , а также атомарные умные указатели.

Период C++17

Основная статья: C++17

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

Данный TS расширяет библиотеку C++, добавляя ranges — новую, более мощную абстракцию для замены пар итераторов, вместе с range views, sentinel ranges, проекциями для преобразований на лету, новыми адаптерами итераторов и алгоритмами. Это расширение наконец позволяет отсортировать вектор с помощью sort ( v ) ;

Данный TS расширяет основной язык C++ и стандартную библиотеку, добавляя бесстековые корутины (возобновляемые функции). Это добавляет ключевые слова co_await , co_yield и co_return .

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

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

  • 2018: Расширения для параллелизма версия 2 TS (ISO/IEC TS 19570:2018) ( ISO Store ) ( 2018 draft )

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

Период C++20

Основная статья: C++20

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

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

Будущее развитие

Основная статья: C++23

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

Смотрите также

Документация C для Истории C

Внешние ссылки

1. История C++: 1979-1991
2. Эволюция языка в реальном мире и для реального мира: C++ 1991-2006
3. Процветание в переполненном и меняющемся мире: C++ 2006-2020
4. Фонд стандартного C++
5. C++ в Википедии
6. Комитет по стандартам C++