Раздел: Документация / Стандарт языка С++ /

Стандарт C++: общие сведения

Все способы изучить Python Все способы изучить С++

Начинающие программисты даже не догадываются о том, какой огромный пласт в этой области скрыт от их глаз, и чего многие из новичков не увидят никогда, потому что это тёмная сторона программирования - чистый исходный код системного уровня… Подробнее...

1.1. Область применения

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

2. C++ - это язык программирования общего назначения, основанный на языке С (Си), как описано в стандарте ISO/IEC 9899:1999 Programming languages — C (далее - стандарт Си, или язык С). В дополнение к возможностям, которые есть в языке С, язык С++ предоставляет дополнительные типы данных, классы, шаблоны, исключения, пространство имён, перегружаемые операторы, перегружаемые имена функций, ссылки, свободное управление операторами, и, кроме того, дополнительные библиотечные возможности.

1.2. Ссылки на нормативные документы

1. Документы, перечисленные в этом разделе, обязательны для применения настоящего документа. Для датированных ссылок используются только указанные издания. Если дата не указана, то используется последнее издание (включая любые поправки).

1.1. Ecma International, ECMAScript Language Specification, Standard Ecma-262, third edition, 1999.

1.2. ISO/IEC 2382 (all parts), Information technology — Vocabulary

1.3. ISO/IEC 9899:1999, Programming languages — C

1.4. ISO/IEC 9899:1999/Cor.1:2001(E), Programming languages — C, Technical Corrigendum 1

1.5. ISO/IEC 9899:1999/Cor.2:2004(E), Programming languages — C, Technical Corrigendum 2

1.6. ISO/IEC 9899:1999/Cor.3:2007(E), Programming languages — C, Technical Corrigendum 3

1.7. ISO/IEC 9945:2003, Information Technology — Portable Operating System Interface (POSIX)

1.8. ISO/IEC 10646-1:1993, Information technology — Universal Multiple-Octet Coded Character Set (UCS). Part 1: Architecture and Basic Multilingual Plane

1.9. ISO/IEC TR 19769:2004, Information technology — Programming languages, their environments and system software interfaces — Extensions for the programming language C to support new character data types

2. Библиотеки, описанные в п. 7 документа ISO/IEC 9899:1999 and Clause 7 of ISO/IEC 9899:1999/Cor.1:2001и в пункте 7 документа ISO/IEC 9899:1999/Cor.2:2003 далее будут называться стандартными библиотеками Си (в оговорках, отмеченных в пунктах с 18 по 30 в С.5, стандартные библиотеки С являются подмножеством стандартных библиотек С++).

3. Библиотека, описанная в ISO/IEC TR 19769:2004 далее будет называться C Unicode TR.

4. Интерфейс операционной системы, описанный в ISO/IEC 9945:2003, далее будет называться POSIX.

5. ECMAScript Language Specification, описанная в стандарте Standard Ecma-262, далее будет называться ECMA-262.

1.3. Термины и определения

1. В этом документе применяются следующие определения.

2. 17.3 определяет дополнительные термины, которые используются только в пунктах с 17 по 30 и приложении D.

3. Термины, которые используются редко в этом Международном Стандарте, определены там, где они используются, а определение этих терминов выделено курсивом.

1.3.1. [defns.argument]

argument
<function call expression> - выражение вызова функции - список разделённых запятой выражений, заключённый в скобки.

1.3.2. [defns.argument.macro]

argument
<function-like macro> - макрос, подобный функции - последовательность разделённых запятой команд препроцессора, заключённая в скобки.

1.3.3. [defns.argument.throw]

argument
<throw expression> - операнд оператора throw (используется для вызова исключения “вручную” - прим. переводчика).

1.3.4. [defns.argument.templ]

argument
<template instantiation> - процесс задействования шаблона - выражение, список идентификаторов типа (type-id) или имён шаблонов (template-name), разделённых запятой и заключённый в скобки.

1.3.5. [defns.cond.supp]

conditionally-supported (условно поддерживается)
Программная конструкция, реализация которой не требует поддержки. [Примечание: Все условно-поддерживаемые конструкции, которые не поддерживаются, должны быть документированы в каждой реализации].

1.3.6. [defns.diagnostic]

diagnostic message (сообщение диагностики, сообщение об ошибке)
Сообщение, принадлежащее к определённому во время выполнения поднабору выходных сообщений.

1.3.7. [defns.dynamic.type]

dynamic type (динамический тип)
<glvalue> тип наиболее наследуемого объекта (1.8), для которого значение glvalue указывает на ссылочное выражение glvalue.

[Пример: если указатель (8.3.1) p, который имеет статический тип “указатель на класс B”, указывает на объект класса D, наследуемый от B (Пункт 10), то динамический тип выражения *p - это “D.” Ссылки (8.3.2) рассматриваются аналогично].

1.3.8. [defns.dynamic.type.prvalue]

dynamic type (динамический тип)
<prvalue> статический тип выражения prvalue.

1.3.9. [defns.ill.formed]

ill-formed program (нерациональная программа, плохо построенная программа)
Программа, которая не является правильно построенной (сформированной).

1.3.10. [defns.impl.defined]

implementation-defined behavior (поведение, определяемое реализацией)
Поведение правильно построенной программной конструкции с правильными данными, которое зависит от реализации и которое должно быть документировано каждой реализацией.

1.3.11. [defns.impl.limits]

implementation limits (ограничения реализации)
Ограничения, налагаемые на программы реализацией языка.

1.3.12. [defns.locale.specific]

locale-specific behavior (поведение, специфическое для местности)
Поведение, которое зависит от местных национальных соглашений, культуры и языка, и которое должно быть документировано каждой реализацией. http://alenacpp.blogspot.ru/2005/08/unspecified-behavior-undefined.html

1.3.13. [defns.multibyte]

multibyte character (многобайтовый символ)
Последовательность из одного или более байтов, представляющая элемент расширенного набора символов источника или среды выполнения. [Примечание: Расширенный набор символов включает в себя базовый набор символов (2.3)].

1.3.14. [defns.parameter]

parameter
<function or catch clause> - функция или блок catch - объект или ссылка, объявленная как часть объявления ил определения функции, или обработчик исключения в блоке catch, который принимает значение на входе в функцию или в обработчик.

1.3.15. [defns.parameter.macro]

parameter
<function-like macro> - макрос, подобный функции - идентификатор из заключённого в скобки списка, который следует сразу за именем макроса.

1.3.16. [defns.parameter.templ]

parameter
<template> шаблон-параметр.

1.3.17. [defns.signature]

signature
<function> имя, список параметров типа (см. раздел 8.3.5), и пространство имён (если таковое имеется). [Примечание: Сигнатуры (подписи) используются как основа для декорирования имён и ссылок]

1.3.18. [defns.signature.templ]

signature
<function template> - шаблон функции - имя, список параметров типа (см. раздел 8.3.5), и пространство имён (если таковое имеется), возвращаемый тип, и список параметров шаблона.

1.3.19. [defns.signature.spec]

signature
<function template specialization> - специализация шаблона функции - сигнатура шаблона, для которого она является специализацией, и аргументы этого шаблона (если указаны явно или неявно).

1.3.20. [defns.signature.member]

signature
<class member function> - функция-член класса - имя, список параметров типа (см. раздел 8.3.5), класс, членом которого является функция, cv-квалификаторы (если имеются), и ref-квалификатор (если имеется) (https://ru.wikipedia.org/wiki/Квалификаторы_типа).

1.3.21. [defns.signature.member.templ]

signature
<class member function template> - шаблон функции-члена класса - имя, список параметров типа (см. раздел 8.3.5), класс, членом которого является функция, cv-квалификаторы (если имеются), и ref-квалификатор (если имеется), возвращаемый тип и список параметров шаблона.

1.3.22. [defns.signature.member.spec]

signature
<class member function template specialization> - специализация шаблона функции-члена класса - сигнатура шаблона функции-члена, для которого она является специализацией, и аргументы этого шаблона (если указаны явно или неявно).

1.3.23. [defns.static.type]

static type (статический тип)
Тип выражения (подробности в разделе 3.9 этого стандарта) в результате анализа программы без учёта семантики исполнения. [Примечание: Статический тип выражения зависит только от программы, в которой появляется выражение, и не изменяется до завершения программы]

1.3.24. [defns.undefined]

undefined behavior (неопределённое поведение)
Поведение, на которое этот Международный Стандарт не накладывает никаких требований. [Примечание: Поведение можно считать неопределённым, когда этот Международный Стандарт не содержит чёткого определения поведения или когда программа использует ошибочные конструкции или ошибочные данные. Допустимое неопределённое поведение находится в границах от полного игнорирования ситуации с совершенно непредсказуемым результатом, до ведения документирования параметров окружения (с выдачей сообщения об ошибке или без выдачи такового), и до прерывания трансляции или выполнения программы (с выдачей диагностического сообщения). Многие ошибочные программные конструкции не приводят к неопределённому поведению; они должны диагностироваться] (http://alenacpp.blogspot.ru/2005/08/unspecified-behavior-undefined.html)

1.3.25. [defns.unspecified]

unspecified behavior (неуточняемое или неспецифицированное поведение)
Поведение правильно построенной программной конструкции с правильными данными, которое зависит от реализации. [Примечание: Реализация не обязана документировать выбор поведения. Как правило, диапазон допустимых поведений указан в данном Международном стандарте]

1.3.26. [defns.well.formed]

well-formed program (правильно построенная программа)
Программа на C++, построенная согласно правилам синтаксиса, диагностируемым правилам семантики, и Правилу Одного Определения (One Definition Rule - раздел 3.2 этого стандарта). https://ru.wikipedia.org/wiki/Правило_одного_определения

1.4. Соответствие реализации

1. Набор диагностируемых правил состоит из всех синтаксических и семантических правил в этом Международном стандарте, за исключением тех правил, которые содержат явное указание на то, что “диагностика не требуется” или которые описаны как приводящие к “неопределенному поведению”.

2. Хотя этот Международный стандарт устанавливает только требования к реализациям C++, эти требования часто легче понять, если они сформулированы как требования к программам, частям программ или выполнению программ. Такие требования имеют следующее значение:

2.1. Если программа не содержит нарушений правил настоящего Международного стандарта, соответствующая реализация в пределах своих ресурсов должна принять и правильно исполнить эту программу (“Правильное выполнение” может включать неопределенное поведение, в зависимости от обрабатываемых данных; см. 1.3 и 1.9).

2.2. Если программа содержит нарушение какого-либо диагностируемого правила или появление конструкции, описанной в этом Стандарте как “условно поддерживаемая”, когда реализация не поддерживает эту конструкцию, соответствующая реализация должна выдать по крайней мере одно диагностическое сообщение.

2.3. Если программа содержит нарушение правила, для которого не требуется диагностика, этот Международный стандарт не предъявляет никаких требований к реализации в отношении этой программы.

3. Для классов и шаблонов классов в разделах библиотеки указываются частичные определения. Частные члены (пункт 11) не указываются, но каждая реализация должна предоставлять их для заполнения определений в соответствии с описанием в разделах библиотеки.

4. Для функций, шаблонов функций, объектов и значений в разделах библиотеки указываются объявления. Реализации должны предоставлять определения, соответствующие описаниям в разделах библиотеки.

5. Имена, определенные в библиотеке, имеют область пространства имен (7.3). Модуль транслятора C++ (2.2) получает доступ к этим именам, включая соответствующий заголовок стандартной библиотеки (16.2).

6. Шаблоны, классы, функции и объекты в библиотеке имеют внешнюю связь (3.5). Реализация предоставляет определения для стандартных библиотечных объектов, по мере необходимости, при объединении единиц перевода для формирования полной программы на C++ (2.2).

7. Определены два вида реализаций: платформенная реализация (hosted implementation) и автономная реализация (freestanding implementation). Для платформенной реализации этот Международный стандарт определяет набор доступных библиотек. Автономная реализация - это реализация, в которой выполнение может выполняться без использования операционной системы, и имеет определенный реализацией набор библиотек, который включает в себя определенные библиотеки поддержки языков (17.6.1.3).

8. Соответствующая реализация может иметь расширения (включая дополнительные библиотечные функции) при условии, что они не изменяют поведение какой-либо хорошо сформированной программы. Реализации необходимы для диагностики программ, использующих такие расширения, которые неправильно сформированы в соответствии с настоящим Международным стандартом. Однако, сделав это, они могут компилировать и выполнять такие программы.

9. Каждая реализация должна включать документацию, которая идентифицирует все условно поддерживаемые конструкции, которые она не поддерживает, и определяет все характеристики, зависящие от локали (эта документация также определяет поведение, определяемое реализацией; см. 1.9.).

1.5. Структура настоящего Международного стандарта

1. Пункты 2-16 описывают язык программирования C++. Это описание включает подробные синтаксические спецификации в форме, описанной в 1.6. Для удобства в Приложении А повторяются все такие синтаксические спецификации.

2. Пункты с 18 по 30 и Приложение D (пункты о библиотеке) описывают стандартную библиотеку C++. Это описание включает подробные описания шаблонов, классов, функций, констант и макросов, составляющих библиотеку, в форме, описанной в пункте 17.

3. В приложении В рекомендуются нижние границы возможностей соответствующих реализаций.

4. Приложение C кратко описывает эволюцию C++ с момента его первого опубликованного описания и подробно объясняет различия между C++ и C. Некоторые функции C++ существуют исключительно в целях совместимости; Приложение D описывает эти функции.

5. Во всем этом Международном стандарте каждый пример приводится, начинаясь словами “[Пример:” и заканчивается словами “ — конец примера]". Каждое примечание начинается словами “[Примечание:” и заканчивается словами “ — конец примечания]". Примеры и примечания могут быть вложенными.


Как стать программистом 2.0 Как стать программистом 2.0

Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее...
Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика