-
Начало эпохи "C with Classes"
Бьёрн Страуструп, работая в Bell Labs над моделированием распределённых систем, столкнулся с ограничениями языка Си. Ему требовались более выразительные средства для работы с абстракциями. В этот день он начал разработку препроцессора, добавлявшего в Си классы – так появился "C with Classes". Первые реализации поддерживали:
1. Базовые классы и простое наследование
2. Конструкторы и деструкторы
3. Функции-члены
4. Инкапсуляцию через public/private -
Рождение C++
После четырёх лет развития "C with Classes" язык претерпел значительные изменения: 1. Добавлены виртуальные функции (полиморфизм) 2. Появились ссылки () как альтернатива указателям 3. Введены операторы new/delete для работы с памятью 4. Добавлены перегрузка операторов и функций.
Именно в этот день язык получил своё знаменитое имя – C++. Оператор ++ символизировал эволюцию по сравнению с Си. В этом же году выпущен CFront – первый компилятор, который транслировал C++ в обычный C-код. -
Первый коммерческий релиз (C++ 1.0)
Этот релиз включал: 1. Полноценную поддержку ООП 2. Шаблоны (в экспериментальной форме) 3. Исключения (try/catch) 4. Пространства имён (позже стандартизированные). В этот же день вышла первая редакция книги "The C++ Programming Language", которая на десятилетия стала библией для разработчиков. Интересно, что первоначально Страуструп рассматривал C++ как временное решение, предполагая, что вскоре появится что-то лучшее. -
C++ 1.2
Первое значительное обновление после коммерческого релиза: Добавлена поддержка protected-наследования, Улучшена работа с шаблонами (хотя ещё не стандартизированы), Введены чистые виртуальные функции, Появились первые попытки обработки исключений. -
C++ 2.0 и начало стандартизации
Версия 2.0 принесла революционные изменения: 1. Множественное наследование 2. Абстрактные классы 3. Защищённые члены (protected) 4. Улучшенный механизм исключений. В этом же году началась работа по стандартизации языка. Компания Borland выпустила Turbo C++ 1.0 – первый доступный коммерческий компилятор с интегрированной средой разработки для DOS. -
C++ Interim
Промежуточная версия перед стандартом: Стабилизирована работа с шаблонами, Добавлены частичные специализации, Улучшена поддержка RTTI, Введены явные объявления конструкторов. В этот период STL (Standard Template Library) начинает активно использоваться, хотя ещё не является частью стандарта. -
Утверждение C++98
После почти десяти лет работы комитет ISO утвердил первый международный стандарт. Основные нововведения:
1. Standard Template Library (STL):
a)Контейнеры (vector, list, map)
b)Алгоритмы (sort, find)
c)Итераторы
2. RTTI (typeid, dynamic_cast)
3. Пространства имён
4. Булевы тип (bool).
Этот стандарт сделал C++ по-настоящему универсальным языком. -
Публикация C++98
Официальная публикация стандарта ISO/IEC 14882:1998 (C++98). -
стандарт C++ ISO/IEC 14882:2003
Опубликован стандарт C++ ISO/IEC 14882:2003, где исправлены выявленные ошибки и недочёты предыдущей версии стандарта. -
C++/CLI
Microsoft представила расширение для платформы .NET, которое: Позволяло использовать C++ для разработки под .NET, Ввело новые синтаксические конструкции (^ для ссылок), Оставалось нишевым решением из-за сложности -
C++11: Современная эра
Этот стандарт изменил всё представление о C++: Лямбда-функции: {}, Автовывод типов: auto x = 5;, Умные указатели: shared_ptr, unique_ptr, Move-семантика: std::move, Многопоточность: std::thread, Range-based for: for(auto x : container).
Разработка заняла почти 8 лет (первоначально планировался как C++0x). Стандарт сделал код более выразительным и безопасным. -
C++14
Неофициальное название версии стандарта C++ ISO/IEC JTC1. C++14 можно рассматривать как небольшое расширение над C++11, содержащее в основном исправления ошибок и небольшие улучшения. Главные улучшения: Умные лямбда-функции – теперь можно писать универсальные функции без указания типов. Двоичные числа – программисты получили возможность записывать числа в виде нулей и единиц (например, 0b1010 вместо 10). Автоматический вывод типов. Расширенные возможности для вычислений на этапе компиляции. -
C++17
Основные новшества: Разбор сложных объектов – теперь можно легко "разбирать" пары, кортежи и структуры на отдельные переменные. Работа с файлами – появилась стандартная библиотека для удобного управления файлами и папками. Умные условия в шаблонах – новая конструкция if constexpr упростила написание сложных шаблонов. Упрощённые пространства имён – вложенные пространства имён теперь записываются короче. Безопасные альтернативы – добавлены новые типы данных для замены небезопасных конструкций. -
C++20: Модули и концепты
Самый масштабный апдейт после C++11:
Модули – замена #include, Концепты – ограничения шаблонов, Корутины – поддержка асинхронности, std::format – современное форматирование. -
C++23: Уточнения и улучшения
Последний на данный момент стандарт принёс:
1)std::mdspan – многомерные массивы
2)std::print – удобный вывод
3)std::expected – обработка ошибок
Улучшения для работы с Unicode