Является ли стандартная библиотека С++ частью языка С++?
Является ли стандартная библиотека С++ частью языка С++? (обратите внимание на "язык", а не "стандарт", оба они, конечно, являются частью стандарта).
Если да, то почему? Если нет, почему бы и нет?
Ответ на этот вопрос может отличаться в С++ 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]