Является ли стандартная библиотека С++ частью языка С++?

Является ли стандартная библиотека С++ частью языка С++? (обратите внимание на "язык", а не "стандарт", оба они, конечно, являются частью стандарта).

Если да, то почему? Если нет, почему бы и нет?

Ответ на этот вопрос может отличаться в С++ 98, С++ 03 и С++ 0x.

Это не субъективно, потому что это можно сделать из формулировки/требований в соответствующих документах стандартов.

Ответ 1

Самые первые слова во всех версиях стандарта, которые я видел "Настоящий международный стандарт определяет требования к реализации языка программирования С++ ". Другими словами, все, что указано в стандарте, является частью "языка".

В других местах стандарт различает библиотеку и остальная часть языка. Формально, однако, единственное реальное различие заключается в том, что библиотека определена в терминах небиблиотечных частей язык; то есть библиотека определяет классы и шаблоны. Стандарт также дает понять, что библиотека не должна присутствовать как библиотека, в виде файлов заголовков и частей, или все это может быть встроено в компилятор (хотя я не знаю ни одного компилятора, который на самом деле так).

Ответ 2

Да, как в текущем стандарте (С++ 03), так и в новом предстоящем (С++ 0x, который, наконец, достиг финальной стадии проекта, поэтому он не должен быть слишком длинным сейчас), функции библиотеки являются частью спецификации (по крайней мере, для размещенных реализаций). Даже автономные реализации требуют стандартной библиотеки, хотя и гораздо более простой.

В С++ 03 главы 17-27 посвящены стандартной библиотеке. В С++ 0x (по крайней мере, проект n3225, который является последним, который мне удобен), главы 17-30 посвящены.

Вы можете увидеть стандарты для С++ 03 и текущий проект С++ 0x для подтверждения этого. Стандарты содержат как собственно язык, так и стандартную библиотеку.

Из С++ 03 (который почти такой же, как С++ 0x для этого раздела):

1.1 Область действия [intro.scope]

1 Этот международный стандарт определяет требования к реализации языка программирования С++. Первым таким требованием является то, что они реализуют язык, поэтому этот международный стандарт также определяет С++. Другие требования и релаксации первого требования появляются в разных местах в рамках этого международного стандарта. 2 С++ - это язык программирования общего назначения, основанный на языке программирования C, как описано в языках программирования ИСО/МЭК 9899: 1990 - C (1.2). В дополнение к средствам, предоставляемым C, С++ предоставляет дополнительные типы данных, классы, шаблоны, исключения, пространства имен, встроенные функции, перегрузку функций, перегрузку имен функций, ссылки, операторы управления свободным хранилищем и дополнительные возможности библиотеки.

Итак, вы можете видеть, что авторы стандартов делают различие между собственно языком и библиотекой, но для разработчиков стандарта и пользователей языка язык - это все. Вы не можете называть себя С++, если вы не следуете стандарту, а стандарт требует как собственно языка, так и библиотеки.

Ответ 3

По крайней мере, они не являются отдельными!

В нескольких местах языковые предложения стандарта используют типы и интерфейсы, определенные в разделах библиотеки. Как это можно сделать, если они были отдельными объектами?

Например, конструкция

std::vector<int> v = {1, 2, 3, 4, 5};

использует std:: initializer_list из библиотеки.

Новое выражение

char* p = new char[42];

использует оператор new из <new> .

Оператор typeid возвращает std:: type_info, тип библиотеки.

Основная функция dynamic_cast может генерировать исключение, определенное в библиотеке.

Некоторые части библиотеки, такие как type_traits и atomic, не могут быть реализованы как просто библиотека, поэтому они определенно не являются отдельными.

Ответ 4

Да - вы можете найти Библиотеку, указанную в стандарте С++. Иногда вы сталкиваетесь с термином "функции основного языка", чтобы отличать их от функций библиотеки, но они оба являются частью языка.

[EDIT] Собственно, сам стандарт, как представляется, делает различие между языком и библиотекой. Из последнего черновика С++ 0x (1.5)

В статьях 2-16 описывается язык программирования С++. Это описание включает подробный синтаксический спецификации в форме, описанной в 1.6. Для удобства Приложение А повторяет все такие синтаксические спецификации. 2 Статьи с 18 по 30 и Приложение D (пункты библиотеки) описывают стандартную библиотеку С++. Это описание включает подробные описания шаблонов, классов, функций, констант и макросов, которые составляют библиотеки, в форме, описанной в разделе 17.

[/EDIT]