Добавил:
t.me Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2 семестр / Литература / Язык программирования С++. Краткий курс. Страуструп

.pdf
Скачиваний:
10
Добавлен:
16.07.2023
Размер:
31.34 Mб
Скачать

294

Глава

16.

История

и

совместимость

и

12,

"Алгоритмы").

Это

была

работа

Алекса

Степанова

(Alex Stepanov,

с

Дэйвом

Массером

(Dave Musser),

Мэн

Ли

(Meng Lee)

и

др.),

основанная

на

более

чем

десятилетней

работе

над

обобщенным

программированием. STL

оказалась

чрезвычайно

влиятельной

библиотекой

как

в

сообществе

С++,

так

и

за

его

пределами.

С++ вырос в среде с множеством устоявшихся и экспериментальных язы­

ков программирования (например, Ada [27], Algol 68 [66] и ML [36]).

В то

время я был хорошо

знаком примерно с 25

языками, и их влияние на

С++

описано в [51] и [54].

Однако определяющее

влияние всегда исходило от при­

ложений, с которыми

мне приходилось сталкиваться. Это была целенаправ­

ленная

политика,

нацеленная

на

то,

чтобы

разработка

С++

была

"управляемая

проблемами",

а

не

подражательная.

16.1.3.

Стандарты

150

С++

ду

Взрывной рост использования С++ вызвал некоторые изменения. В 1987 го­

стало ясно, что неизбежна формальная стандартизация С++ и что нам нуж­

но

начать

готовить

почву

для

усилий

по

стандартизации

[51].

Результатом

стало

сознательное

стремление

поддерживать

связь

между

разработчиками

компиляторов

С++

и

их

основными

пользователями.

Это

было

сделано

с

по­

мощью

бумажной

и

электронной

почты

и

личных

встреч

на

конференциях

по

С++ и в других местах.

АТ&Т Bell Labs внесла

большой

вклад

в

развитие С++,

позволив мне

по­

делиться

проектами

пересмотренных

версий справочного

руководства

по

С++

с

разработчиками

и

пользователями.

Поскольку многие

из

этих

людей

работали

в

компаниях,

которые

могут

рассматриваться

как

конкурирующие

с

АТ&Т,

значение

этого

вклада

не

следует

недооценивать.

Менее

просвещенная

компания

могла

бы

вызвать

серьезные

проблемы

фрагментации

языка,

просто

ничего

не

делая.

Как

оказалось,

около

ста

человек

из

десятков

организаций

прочитали

и

прокомментировали

то,

что

стало

общепринятым

справочным

руководством

и

базовым

документом

для

усилий

по

стандартизации

ANSI

С++.

Их

имена

можно

найти

в

[18].

Комитет

ХЗJ16

ANSI

был

созван

в

де­

кабре

1989

года

по

инициативе

Hewlett-Packard.

В

июне

1991

года

эта

ANSI

(американская

национальная)

стандартизация

С++

стала

частью

ISO

(меж­

дународной)

стандартизации

С++.

Комитет

ISO

С++

называется

"WG21 ".

С

1990

года

эти

совместные

комитеты

по

стандартам

С++

стали

основным

форумом

для

развития

С++

и

уточнения

его

определения.

Я

участвовал

в

этих

комитетах

повсюду.

В

частности,

будучи

председателем

рабочей

группы по

расширениям

(позже

названной

группой

эволюции)

с

1990

по

2014

год,

я

не­

посредственно

отвечал

за

обработку

предложений

об

основных

изменениях

в

С++

и

добавление

новых

языковых

функций.

Первоначальный

проект

стан-

16.2.

Эволюция

возможностей

С++

299

возможностей,

которые

являются

новинками

С++

11,

не

имеют

смысла

в

изо­

ляции

от

инфраструктуры,

предоставляемой

более

старыми

функциональны­

ми

возможностями

языка.

[ 1]

[2] [3] [4]

[5] [6] [7]

[8] [9]

[10]

[11]

[12] [13] [14] [15] [16] [17] [ 18]

[19] [20] [21] [22] [23] [24]

Унифицированная и общая инициализация с использованием списков

{ }

(§ 1.4, §4.2.3)

 

Вывод типов

из инициализаторов: auto (§ 1.4)

Предотвращение сужения(§1.4)

 

Обобщенные

и гарантированные

константные

(§ 1.6)

 

 

Цикл for для диапазона(§1.7)

 

выражения:

constexpr

Ключевое слово для нулевого указателя:

nullptr (§

1.7)

 

Строго

 

типизированные

перечисления

с областью

видимости: enum

class

(§2.5)

 

 

 

 

 

 

Проверки времени компиляции: s ta tic

assert (§3.5.5)

Отображение

{ }-списков на s td: : ini t i аli z еr _ l i s t

на уровне язы­

ка (§4.2.3)

 

 

 

 

 

 

Ссылки

на

r-значения,

обеспечивающие

семантику

перемещения

(§5.2.2)

 

 

 

 

 

 

 

Вложенные аргументы шаблонов завершаются>> (не требуется пробел

между

символами >)

 

 

 

 

 

Лямбда-выражения (§6.3 .2)

 

 

 

 

Шаблоны с переменным

количеством параметров (§7.4)

 

Псевдонимы

типов и шаблонов (§6.4.2)

 

 

 

 

Символы Unicode

 

Целочисленный тип long long

 

Управление выравниванием: alignas и alignof

Возможность использовать тип

выражения как тип

type

 

в

объявлении:

dec 1

Необработанные строковые литералы (§9.4)

 

Обобщенные POD (Plain Old Data- обычные старые данные)

Обобщенные union

 

Локальные

классы в качестве аргументов шаблонов

 

Синтаксис

указания возвращаемого типа в виде суффикса

Синтаксис

атрибутов и два стандартных атрибута:

[ [carries_ depen

dency]] и

[ [noreturn]]