C++
Стандарт ISO C ++
Поиск…
Вступление
В 1998 году появилась первая публикация стандарта, в соответствии с которой C ++ - стандартизованный язык. С этого времени C ++ развился, в результате чего появились разные диалекты C ++. На этой странице вы можете найти обзор всех разных стандартов и их изменений по сравнению с предыдущей версией. Подробности о том, как использовать эти функции, описаны на более специализированных страницах.
замечания
Когда упоминается C ++, часто ссылается на «Стандарт». Но что это за стандарт?
C ++ имеет долгую историю. Начав в качестве небольшого проекта Bjarne Stroustrup в Bell Labs, к началу 90-х годов он стал довольно популярным. Несколько компаний создавали компиляторы C ++, чтобы пользователи могли запускать свои компиляторы C ++ на самых разных компьютерах. Но для того, чтобы облегчить это, все эти конкурирующие компиляторы должны делиться одним определением языка.
В этот момент язык C успешно был стандартизирован. Это означает, что было написано формальное описание языка. Это было представлено Американскому национальному институту стандартов (ANSI), который открыл документ для обзора и впоследствии опубликовал его в 1989 году. Спустя год Международная организация стандартов (поскольку у нее были бы разные акронимы на разных языках, они выбрали одну форму , ISO, полученный от греческого isos, что означает равный.) Принял американский стандарт в качестве международного стандарта.
Для C ++ с самого начала было ясно, что международный интерес. Была начата рабочая группа по ИСО (известна как РГ21 в рамках Субкомитета 22). Эта рабочая группа подготовила первый стандарт примерно в 1995 году. Но, как мы знаем программисты, нет ничего более опасного для запланированной доставки, чем функции последней минуты, и это случилось и с C ++. В 1995 году появилась крутая новая библиотека под названием STL, и люди, работающие в WG21, решили добавить сглаженную версию к стандартному проекту C ++. Естественно, это привело к тому, что крайние сроки были упущены, и только 3 года спустя документ стал окончательным. ISO - очень формальная организация, поэтому стандарт C ++ был окрещен не очень товарным именем ISO / IEC 14882. Поскольку стандарты могут быть обновлены, эта точная версия стала известна как 14882: 1998.
И действительно, требовалось обновить Стандарт. Стандарт - очень толстый документ, целью которого является точное описание того, как должны работать компиляторы C ++. Даже небольшая двусмысленность может стоить исправления, поэтому к 2003 году было выпущено обновление 14882: 2003. Однако это не добавило никакой функции на C ++; новые функции были запланированы для второго обновления.
Неофициально это второе обновление было известно как C ++ 0x, потому что неизвестно, будет ли это требоваться до 2008 или 2009 года. Ну, эта версия также получила небольшую задержку, поэтому стала 14882: 2011.
К счастью, WG21 решила не допускать этого снова. C ++ 11 был хорошо принят и позволил возобновить интерес к C ++. Итак, чтобы сохранить импульс, третье обновление прошло от планирования до публикации через 3 года, чтобы стать 14882: 2014.
Работа там тоже не прекращалась. Был предложен стандарт C ++ 17, и была запущена работа для C ++ 20.
Текущие рабочие проекты
Все опубликованные стандарты ИСО доступны для продажи в магазине ISO ( http://www.iso.org ). Однако рабочие проекты стандартов C ++ доступны бесплатно.
Различные версии стандарта:
- Предстоящие (иногда называемые C ++ 20 или C ++ 2a): текущий рабочий черновик ( HTML-версия )
- Предлагается (иногда называется C ++ 17 или C ++ 1z): март 2017 рабочий проект N4659 .
- C ++ 14 (Иногда упоминается как C ++ 1y): ноябрь 2014 рабочий проект N4296
- C ++ 11 (иногда называемый C ++ 0x): февраль 2011 года рабочий проект N3242
- C ++ 03
- С ++ 98
C ++ 11
Стандарт C ++ 11 является основным расширением стандарта C ++. Ниже вы можете ознакомиться с обзором изменений, поскольку они были сгруппированы по часто задаваемому файлу isocpp с ссылками на более подробную документацию.
Расширения языка
Общие функции
- авто
- decltype
- Оператор Range-for
- Списки инициализаторов
- Унифицированный синтаксис и семантика инициализации
- Ссылки Rvalue и семантика перемещения
- Лямбда
- noexcept для предотвращения распространения исключений
- constexpr
- nullptr - литерал с нулевым указателем
- Копирование и повторное удаление исключений
- Внутренние пространства имен
- Пользовательские литералы
Классы
- = default и = удалить
- Управление перемещением и копированием по умолчанию
- Делегирование конструкторов
- Инициализаторы членов класса
- Унаследованные конструкторы
- Элементы управления переопределением: переопределить
- Элементы управления переопределением: окончательный
- Явные операторы преобразования
Другие типы
- класс enum
- long long - более длинное целое число
- Расширенные целые типы
- Обобщенные союзы
- Обобщенные POD
Шаблоны
- Внешние шаблоны
- Шаблонные псевдонимы
- Шаблоны Variadic
- Локальные типы в качестве аргументов шаблона
совпадение
- Модель памяти параллелизма
- Динамическая инициализация и уничтожение с параллелизмом
- Потоковое локальное хранилище
Различные функции языка
- Какова ценность __cplusplus для C ++ 11?
- Синтаксис типа возврата суффикса
- Предотвращение сужения
- Прямоугольные скобки
- static_assert утверждения времени компиляции
- Строковые литералы
- Атрибуты
- центровка
- Функции C99
Расширения библиотек
генеральный
- unique_ptr
- shared_ptr
- weak_ptr
- Сбор мусора ABI
- кортеж
- Типовые черты
- функция и привязка
- Регулярные выражения
- Утилиты времени
- Генерация случайных чисел
- Ограниченные распределители
Контейнеры и алгоритмы
- Улучшение алгоритмов
- Улучшение контейнеров
- unordered_ * контейнеры
- станд :: массив
- forward_list
совпадение
- Потоки
- Взаимное исключение
- Замки
- Переменные условия
- атомная энергетика
- Фьючерсы и обещания
- асинхронной
- Отказ от процесса
C ++ 14
Стандарт C ++ 14 часто упоминается как исправление для C ++ 11. Он содержит только ограниченный список изменений, большинство из которых являются расширениями новых функций на C ++ 11. Ниже вы можете ознакомиться с обзором изменений, поскольку они были сгруппированы по часто задаваемому файлу isocpp с ссылками на более подробную документацию.
Расширения языка
- Бинарные литералы
- Вычет обобщенного типа возврата
- decltype (авто)
- Обобщенные лямбда-захваты
- Родовые лямбды
- Переменные шаблоны
- Расширенный
constexpr
- Атрибут
[[deprecated]]
- Цифровые разделители
Расширения библиотек
- Общая блокировка
- Пользовательские литералы для
std::
types -
std::make_unique
- Тип преобразования
_t
aliases - Адресация кортежей по типу (например,
get<string>(t)
) - Прозрачные функциональные операторы (например,
greater<>(x)
) -
std::quoted
Устаревшее / удалено
-
std::gets
устарел в C ++ 11 и удален из C ++ 14 -
std::random_shuffle
устарел
C ++ 17
Стандарт C ++ 17 является полнофункциональным и был предложен для стандартизации. В компиляторах с экспериментальной поддержкой этих функций он обычно называется C ++ 1z.
Расширения языка
- Сгибание выражений
- декларирование аргументы шаблона не типа с
auto
- Гарантированное копирование
- Вычисление параметра шаблона для конструкторов
- Структурированные привязки
- Компактные вложенные пространства имен
- Новые атрибуты:
[[fallthrough]]
,[[nodiscard]]
,[[maybe_unused]]
- Сообщение по умолчанию для
static_assert
- Инициализаторы в
if
иswitch
- Встроенные переменные
-
if constexpr
- Порядок гарантий оценки выражений
- Динамическое распределение памяти для перенастроенных данных
Расширения библиотек
-
std::optional
-
std::variant
-
std::string_view
-
merge()
иextract()
для ассоциативных контейнеров - Библиотека файловой системы с заголовком
<filesystem>
. - Параллельные версии большинства стандартных алгоритмов (в заголовке
<algorithm>
). - Добавление математических специальных функций в заголовок
<cmath>
. - Перемещение узлов между map <>, unordered_map <>, set <> и unordered_set <>
C ++ 03
В стандарте C ++ 03 в основном рассматриваются отчеты о дефектах стандарта C ++ 98. Помимо этих дефектов, он добавляет только одну новую функцию.
Расширения языка
С ++ 98
C ++ 98 - первая стандартизованная версия C ++. Поскольку он был разработан как расширение для C, добавлены многие функции, которые выделяют C ++ из C.
Расширения языка (в отношении C89 / C90)
- Классы, Производные классы, виртуальные функции-члены, константные функции-члены
- Перегрузка функций, перегрузка оператора
- Комментарии по одной строке (введена в C-languague со стандартом C99)
- Рекомендации
- новый и удалить
- boolean type (был введен в C-languague со стандартом C99)
- шаблоны
- Пространства имен
- исключения
- конкретные броски
Расширения библиотек
- Библиотека стандартных шаблонов
C ++ 20
C ++ 20 - это предстоящий стандарт C ++, который в настоящее время находится в разработке, основанный на стандарте C ++ 17. Прогресс можно отслеживать на официальном сайте ISO cpp .
Следующие функции - это просто то, что было принято для следующей версии стандарта C ++, ориентированного на 2020 год.
Расширения языка
На данный момент никаких языковых расширений не принято.
Расширения библиотек
На данный момент никаких расширений библиотеки не принято.