ОГЛАВЛЕНИЕ
1. ОБЩИЕ ПОЛОЖЕНИЯ GENERAL 18
1.1. Сфера действия Scope 18
1.2. Нормативные ссылки Normative references 18
1.3. Определения Definitions 19
1.3.1. Доступ Access 19
1.3.2. Аргумент Argument 19
1.3.3. Аргумент Argument 19
1.3.4. Аргумент Argument 20
1.3.5. Аргумент Argument 20
1.3.6. Условно-поддерживаемое Conditionally-supported 20
1.3.7. Диагностическое сообщение Diagnostic message 20
1.3.8. Динамический тип Dynamic type20
1.3.9. Динамический тип Dynamic type 21
1.3.10. Неправильная программа Ill-formed program 21
1.3.11. Поведение, определяемое реализацией Implementation-defined behavior 21
1.3.12. Ограничения реализации Implementation limits 21
1.3.13. Поведение, определяемое местной спецификой Locale-specific behavior 21
1.3.14. Многобайтовый символ Multibyte character 21
1.3.15. Параметр Parameter 21
1.3.16. Параметр Parameter 22
1.3.17. Параметр Parameter 22
1.3.18. Сигнатура Signature 22
1.3.19. Сигнатура Signature 22
1.3.20. Сигнатура Signature 22
1.3.21. Сигнатура Signature 22
1.3.22. Сигнатура Signature 22
1.3.23. Сигнатура Signature 23
1.3.24. Статический тип Static type 23
1.3.25. Неопределенное поведение Undefined behavior 23
1.3.26. Неспецифицированное поведение Unspecified behavior 23
1.3.27. Правильная программа Well-formed program 23
1.4. Соответствие реализации настоящему Стандарту Implementation compliance 24
1.5. Структура данного Международного Стандарта Structure of this International Standard 26
1.6. Форма спецификации синтаксиса Syntax notation 27
1.7. Модель памяти С++ The C++ memory model 28
1.8. Объектная модель С++ The C++ object model 29
1.9. Выполнение программы Program execution 31
1.10. Многопотоковое выполнение и совместный доступ к данным Multi-threaded executions and data races 36
1.11. Благодарности Acknowledgments 45
2. ЛЕКСИЧЕСКИЕ СОГЛАШЕНИЯ LEXICAL CONVENTIONS 46
2.1. Раздельная трансляция Separate translation 46
7
2.2. Фазы трансляции Phases of translation 46
2.3. Множества символов Character sets 50
Триграфы Trigraph sequences 52
2.4. Лексемы препроцессора Preprocessing tokens 53
2.5. Альтернативные лексемы Alternative tokens 54
2.6. Лексемы Tokens 55
2.7. Комментарии Comments 56
2.8. Имена заголовочных файлов Header names 56
2.9. Числа препроцессора Preprocessing numbers 57
2.10. Идентификаторы Identifiers 57
2.11. Служебные слова Keywords 60
2.12. Операции и пунктуаторы Operators and punctuators 61
2.13. Литералы Literals 61
2.13.1. Виды литералов Kinds of literals 61
2.13.2. Целые литералы Integer literals 61
2.13.3. Символьные литералы Character literals 64
2.13.4. Плавающие литералы Floating literals 67
2.13.5. Строковые литералы String literals 69
2.13.6. Булевские литералы Boolean literals 73
2.13.7. Указательные литералы Pointer literals 73
2.13.8. Литералы, определяемые пользователем User-defined literals 74
3. ОСНОВНЫЕ ПОНЯТИЯ BASIC CONCEPTS 77
3.1. Объявления и описания Declarations and definitions 78
3.2. Правило одного описания One definition rule 80
3.3. Область действия Scope 85
3.3.1. Области объявлений и области действия Declarative regions and scopes 85
3.3.2. Точка объявления Point of declaration 86
3.3.3. Область действия блока Block scope 89
3.3.4. Область действия прототипа функции Function prototype scope 89
3.3.5. Область действия функции Function scope 89
3.3.6. Область действия пространства имен Namespace scope 90
3.3.7. Область действия класса Class scope 91
3.3.8. Область действия перечисления Enumeration scope 92
3.3.9. Область действия параметра шаблона Template Parameter Scope 92
3.3.10. Скрытие имен Name hiding 94
3.4. Поиск имен Name lookup 94
3.4.1. Поиск неквалифицированного имени Unqualified name lookup 95
3.4.2. Поиск имен, зависимых от аргументов Argument-dependent name lookup 101
3.4.3. Поиск квалифицированного имени Qualified name lookup 104
3.4.3.1. Члены классов Class members 106
3.4.3.2. Члены пространств имен Namespace members 107
3.4.4. Уточненные спецификаторы типов Elaborated type specifiers 112
8
3.4.5. Доступ к члену класса Class member access 113
3.4.6. Директивы-использования и псевдонимы пространств имен Using-directives and namespace aliases 115
3.5. Программа и связывание Program and linkage 115
3.6. Старт и завершение программы Start and termination 119
3.6.1. Функция main main function 119
3.6.2. Инициализация нелокальных переменных Initialization of non-local variables 120
3.6.3. Завершение Termination 124
3.7. Класс памяти Storage duration 126
3.7.1. Статический класс памяти Static storage duration 126
3.7.2. Потоковый класс памяти Thread storage duration 126
3.7.3. Автоматический класс памяти Automatic storage duration 127
3.7.4. Динамический класс памяти Dynamic storage duration 127
3.7.4.1. Функции отведения памяти Allocation functions 128
3.7.4.2. Функции освобождения памяти Deallocation functions 130
3.7.4.3. Безопасно-производные указатели Safely-derived pointers 131
3.7.5. Класс памяти подобъектов Duration of sub-objects 133
3.8. Время жизни объекта Object lifetime 133
3.9. Типы Types 138
3.9.1. Базовые типы Fundamental types 142
3.9.2. Составные типы Compound types 146
3.9.3. CV-квалификаторы CV-qualifiers 147
3.10. L-значения и r-значения Lvalues and rvalues 149
3.11. Выравнивание Alignment 152
4. СТАНДАРНЫЕ ПРЕОБРАЗОВАНИЯ STANDARD CONVERSIONS 155
4.1. Преобразование l-значения к r-значению Lvalue-to-rvalue conversion 156
4.2. Преобразование массива к указателю Array-to-pointer conversion 158
4.3. Преобразование функции к указателю Function-to-pointer conversion 158
4.4. Преобразования квалификации Qualification conversions 159
4.5. Целочисленные расширения Integral promotions 160
4.6. Расширение плавающих типов Floating point promotion 161
4.7. Целочисленные преобразования Integral conversions 161
4.8. Преобразования плавающих типов Floating point conversions 161
4.9. Преобразования плавающих-к-целочисленным Floating-integral conversions 161
4.10. Преобразования указателей Pointer conversions 162
4.11. Преобразования указателей на члены Pointer to member conversions 163
4.12. Преобразования булевских Boolean conversions 164
4.13. Ранг целого преобразования Integer conversion rank 164
9
5. ВЫРАЖЕНИЯ EXPRESSIONS 166
5.1. Первичные выражения Primary expressions 171
5.1.1. Общие положения General 171
5.1.2. Лямбда-выражения Lambda expressions 175
5.1.3. Выражения свертки Fold expressions 186
5.2. Постфиксные выражения Postfix expressions 187
5.2.1. Индексирование Subscripting 188
5.2.2. Вызов функции Function call 189
5.2.3. Явное преобразование типа (функциональная нотация) Explicit type conversion (functional notation) 192
5.2.4. Вызов псевдодеструктора Pseudo destructor call 193
5.2.5. Доступ к члену класса Class member access 194
5.2.6. Инкремент и декремент Increment and decrement 196
5.2.7. Динамическое приведение Dynamic cast 196
5.2.8. Идентификация типа Type identification 199
5.2.9. Статическое приведение Static cast 200
5.2.10. Реинтерпретирующее приведение Reinterpret cast 204
5.2.11. Константное приведение Const cast 206
5.3. Унарные выражения Unary expressions 208
5.3.1. Унарные операции Unary operators 209
5.3.2. Инкремент и декремент Increment and decrement 211
5.3.3. Операция sizeof Sizeof 211
5.3.4. Операция new New 213
5.3.5. Операция delete Delete 221
5.3.6. Операция alignof Alignof 224
5.3.7. Операция noexcept Noexcept 224
5.4. Явное преобразование типа (нотация приведения) Explicit type conversion (cast notation) 224
5.5. Операции над указателями на члены классов Pointer-to-member operators 226
5.6. Мультипликативные операции Multiplicative operators 228
5.7. Аддитивные операции Additive operators 228
5.8. Операции сдвига Shift operators 231
5.9. Операции отношения Relational operators 232
5.10. Операции проверки равенства Equality operators 233
5.11. Побитовая операция И Bitwise AND operator 235
5.12. Побитовая операция исключающее ИЛИ Bitwise exclusive OR operator 235
5.13. Побитовая операция включающее ИЛИ Bitwise inclusive OR operator 236
5.14. Логическая операция И Logical AND operator 236
5.15. Операция логическое ИЛИ Logical OR operator 236
5.16. Условная операция Conditional operator 237
5.17. Возбуждение исключительной ситуации Throwing an exception 239
10
5.18. Операции присваивания и составного присваивания Assignment and compound assignment operators 240
5.19. Операция запятая Comma operator 242
5.20. Константные выражения Constant expressions 243
6. ОПЕРАТОРЫ STATEMENTS 249
6.1. Помеченный оператор Labeled statement 249
6.2. Оператор-выражение Expression statement 250
6.3. Составной оператор или блок Compound statement or block 251
6.4. Операторы выбора Selection statements 251
6.4.1. Оператор if The if statement 253
6.4.2. Оператор switch The switch statement 254
6.5. Операторы повторения Iteration statements 255
6.5.1. Оператор while The while statement 256
6.5.2. Оператор do The do statement 257
6.5.3. Оператор for The for statement 257
6.5.4. Оператор for с диапазоном The range-based for statement 258
6.6. Операторы переходов Jump statements 260
6.6.1. Оператор break The break statements 260
6.6.2. Оператор continue The continue statement 260
6.6.3. Оператор return The return statement 261
6.6.4. Оператор goto The goto statement 261
6.7. Оператор-объявление Declaration statement 262
6.8. Разрешение неоднозначностей Ambiguity resolution 264
7. ОБЪЯВЛЕНИЯ DECLARATIONS 266
7.1. Спецификаторы Specifiers 269
7.1.1. Спецификаторы класса памяти Storage class specifiers 270
7.1.2. Спецификаторы функции Function specifiers 273
7.1.3. Спецификатор typedef The typedef specifier 275
7.1.4. Спецификатор friend The friend specifier 277
7.1.5. Спецификатор constexpr The constexpr specifier 278
7.1.6. Спецификаторы типа Type specifiers 283
7.1.6.1. Cv-квалификаторы The cv-qualifiers 284
7.1.6.2. Простые спецификаторы типа Simple type specifiers 286
7.1.6.3. Уточненные спецификаторы типа Elaborated type specifiers 290
7.1.6.4. Спецификатор auto auto specifier 291
7.2. Объявления перечислений Enumeration declatations 297
7.3. Пространства имен Namespaces 304
7.3.1. Описание пространства имен Namespace definition 304
7.3.1.1. Неименованные пространства имен Unnamed namespaces 307
7.3.1.2. Описания членов пространства имен Namespace member definitions 308
7.3.2. Псевдоним пространства имен Namespace alias 310
7.3.3. Объявление использования The using declaration 311
7.3.4. Директива использования Using directive 320
11
7.4. Asm-объявление The asm declaration 323
7.5. Спецификации связывания Linkage specifications 324
7.6. Атрибуты Attributes 328
7.6.1. Синтаксис и семантика атрибутов Attribute syntax and semantics 328
7.6.2. Спецификатор выравнивания Alignment specifier 330
7.6.3. Атрибут noreturn Noreturn attribute 333
7.6.4. Атрибут переноса зависимости Carries dependency attribute 333
7.6.5. Атрибут deprecated Deprecated attribute 335
8. ОПИСАТЕЛИ DECLARATORS 336
8.1. Имена типов Type names 338
8.2. Разрешение неоднозначностей Ambiguity resolution 339
8.3. Смысл описателей Meaning of declarators 341
8.3.1. Указатели Pointers 343
8.3.2. Ссылки References 345
8.3.3. Указатели на члены Pointers to members 347
8.3.4. Массивы Arrays 348
8.3.5. Функции Functions 351
8.3.6. Аргументы по умолчанию Default arguments 357
8.4. Описания функций Function definitions 363
8.4.1. Общие положения In general 363
8.4.2. Явно-умалчиваемые функции Explicitly-defaulted functions 364
8.4.3. Описания удаленных функций Deleted definitions 366
8.5. Инициализаторы Initializers 368
8.5.1. Агрегаты Aggregates 375
8.5.2. Массивы символов Character arrays 379
8.5.3. Ссылки References 380
8.5.4. Инициализация-списком List-initialization 384
9. КЛАССЫ CLASSES 392
9.1. Имена классов Class names 397
9.2. Члены класса Class members 400
9.3. Функции-члены Member functions 406
9.3.1. Нестатические функции-члены Non-static member functions 408
9.3.2. Указатель this The this pointer 410
9.4. Статические члены Static members 411
9.4.1. Статические функции-члены Static member functions 413
9.4.2. Статические данные-члены Static data members 413
9.5. Объединения Unions 415
9.6. Битовые поля Bit-fields 418
9.7. Объявления вложенных классов Nested class declarations 420
9.8. Объявления локальных классов Local class declarations 422
12
9.9. Имена вложенных типов Nested type names 424
10. ПРОИЗВОДНЫЕ КЛАССЫ DERIVED CLASSES 425
10.1. Множественные базовые классы Multiple base classes 427
10.2. Поиск имени члена класса Member name lookup 430
10.3. Виртуальные функции Virtual functions 434
10.4. Абстрактные классы Abstract classes 440
11. УПРАВЛЕНИЕ ДОСТУПОМ К ЧЛЕНАМ КЛАССА MEMBER ACCESS CONTROL 443
11.1. Спецификаторы доступа Access specifiers 446
11.2. Доступность базовых классов и членов базовых классов Accessibility of base classes and base class members 447
11.3. Друзья Friends 451
11.4. Доступ к защищенному члену Protected member access 455
11.5. Доступ к виртуальным функциям Access to virtual functions 457
11.6. Множественный доступ Multiple access 457
11.7. Вложенные классы Nested classes 458
12. СПЕЦИАЛЬНЫЕ ФУНКЦИИ-ЧЛЕНЫ SPECIAL MEMBER FUNCTIONS 459
12.1. Конструкторы Constructors 460
12.2. Временные объекты Temporary objects 464
12.3. Преобразования Conversions 467
12.3.1. Преобразование посредством конструктора Conversion by constructor 468
12.3.2. Функции преобразования Conversion functions 470
12.4. Деструкторы Destructors 472
12.5. Свободная память Free store 477
12.6. Инициализация Initialization 480
12.6.1. Явная инициализация Explicit initialization 480
12.6.2. Инициализация баз и членов Initializing bases and members 482
12.7. Конструирование и разрушение Construction and destruction 489
12.8. Копирование и перемещение объектов классовых типов Copying and moving class objects 492
12.9. Наследование конструкторов Inheriting constructors 505
13. СОВМЕСТНОЕ ИСПОЛЬЗОВАНИЕ OVERLOADING 510
13.1. Объявления, которые могут совместно использоваться Overloadable declarations 510
13
13.2. Совпадение объявлений Declaration matching 514
13.3. Разрешение совместного использования Overload resolution 515
13.3.1. Функции-кандидаты и списки аргументов Candidate functions and argument lists 516
13.3.1.1. Нотация вызова функции Function call syntax 519
13.3.1.1.1. Вызов именованной функции Call to named function 520
13.3.1.1.2. Вызов объекта классового типа Call to object of class type 521
13.3.1.2. Операции в выражениях Operators in expressions 523
13.3.1.3. Инициализация посредством конструктора Initialization by constructor 526
13.3.1.4. Инициализация-копированием класса посредством преобразования, определенного пользователем Copy-initialization of class by user defined conversion 527
13.3.1.5. Инициализация посредством функции преобразования Initialization by conversion function 527
13.3.1.6. Инициализация посредством функции преобразования для непосредственного связывания ссылки Initialization by conversion function for direct reference binding 528
13.3.1.7. Инициализация-списком Initialization by list-initialization 529
13.3.2. Перспективные функции Viable functions 529
13.3.3. Лучшая перспективная функция Best viable function 530
13.3.3.1. Последовательности неявных преобразований Implicit conversion sequences 533
13.3.3.1.1. Последовательности стандартных преобразований Standard conversion sequences 536
13.3.3.1.2. Последовательности пользовательских преобразований User-defined conversion sequences 538
13.3.3.1.3. Последовательности преобразований к многоточию Ellipsis conversion sequences 538
13.3.3.1.4. Связывание ссылки Reference binding 538
13.3.3.1.5. Последовательность инициализации-списком List-initialization sequence 540
13.3.3.2. Ранжирование последовательностей неявных преобразований Ranking implicit conversion sequences 543
13.4. Адрес совместно используемой функции Address of overloaded function 548
13.5. Совместно используемые операции Overloaded operators 550
13.5.1. Унарные операции Unary operators 552
13.5.2. Бинарные операции Binary operators 553
13.5.3. Присваивание Assignment 553
13.5.4. Вызов функции Function call 554
13.5.5. Индексация Subscripting 555
13.5.6. Доступ к члену класса Class member access 555
13.5.7. Инкремент и декремент Increment and decrement 556
13.5.8. Литералы, определенные пользователем User-defined literals 557
13.6. Встроенные операции Built-in operators 548
14. ШАБЛОНЫ TEMPLATES 564
14.1. Параметры шаблона Template parameters 566
14.2. Имена специализаций шаблона Names of template specializations 572
14.3. Аргументы шаблона Template arguments 574
14.3.1. Типовые аргументы шаблона Template type arguments 577
14.3.2. Нетиповые аргументы шаблона Template non-type arguments 578
14.3.3. Шаблоны-аргументы шаблонов Template template arguments 580
14.4. Эквивалентность типов Type equivalence 582
14.5. Объявления шаблонов Template declarations 583
14.5.1. Шаблоны классов Class templates 583
14.5.1.1. Функции-члены шаблонов классов Member functions of class templates 584
14.5.1.2. Классы-члены шаблонов классов Member classes of class templates 585
14
14.5.1.3. Статические данные-члены шаблонов классов Static data members of class templates 586
14.5.1.4. Перечислимые типы-члены шаблонов классов Emuneration members of class termplates 586
14.5.2. Шаблоны-члены Member templates 587
14.5.3. Шаблоны с переменным числом параметров Variadic templates 589
14.5.4. Друзья Friends 593
14.5.5. Частичные специализации шаблона класса Class template partial specializations 596
14.5.5.1. Сопоставление частичных специализаций шаблона класса Matching of class template partial specializations 599
14.5.5.2. Частичное упорядочение специализаций шаблона класса Partial ordering of class template specializations 600
14.5.5.3. Члены специализаций шаблона класса Members of class template specializations 601
14.5.6. Шаблоны функций Function templates 603
14.5.6.1. Совместное использование шаблонов функций Function template overloading 603
14.5.6.2. Частичное упорядочение шаблонов функций Partial ordering of function templates 606
14.5.7. Псевдонимы шаблонов Template aliases 609
14.6. Разрешение имен Name resolution 610
14.6.1. Локально объявленные имена Locally declared names 615
14.6.2. Зависимые имена Dependent names 619
14.6.2.1. Зависимые типы Dependent types 620
14.6.2.2. Выражения, зависимые-по-типу Type-dependent expressions 625
14.6.2.3. Выражения, зависимые-по-значению Value-dependent expressions 628
14.6.2.4. Зависимые аргументы шаблона Dependent template arguments 629
14.6.3. Независимые имена Non-dependent names 629
14.6.4. Разрешение зависимых имен Dependent name resolution 629
14.6.4.1. Точка настройки Point of instantiation 630
14.6.4.2. Функции-кандидаты Candidate functions 631
14.6.5. Дружественные имена, объявленные внутри шаблона класса Friend names declared within a class template 631
14.7. Настройка и специализация шаблона Template instantiation and specialization 632
14.7.1. Неявная настройка Implicit instantiation 634
14.7.2. Явная настройка Explicit instantiation 639
14.7.3. Явная специализация Explicit specialization 643
14.8. Специализации шаблона функции Function template specializations 652
14.8.1. Явное задание аргумента шаблона Explicit template argument specification 652
14.8.2. Выведение аргументов шаблона Template argument deducing 656
14.8.2.1. Выведение аргументов шаблона из вызова функции Deducing template arguments from a function call 662
14.8.2.2. Выведение аргументов шаблона при взятии адреса шаблона функции Deducing template arguments taking the address of a function template 665
14.8.2.3. Выведение аргументов шаблона функции преобразования Deducing conversion function template arguments 665
14.8.2.4. Выведение аргументов шаблона в процессе частичного упорядочивания Deducing template arguments during partial ordering 667
14.8.2.5. Выведение аргументов шаблона из типа Deducing template arguments from a type 669
14.8.2.6. Выведение аргументов шаблона из объявления функции Deducing template arguments from a function declaration 678
14.8.3. Разрешение совместного использования Overload resolution 678
15. ОБРАБОТКА ИСКЛЮЧИТЕЛЬНЫХ СИТУАЦИЙ EXCEPTION HANDLING 681
15.1. Возбуждение исключительной ситуации Throwing an exception 683
15.2. Конструкторы и деструкторы Constructors and destructors 685
15.3. Обработка исключительной ситуации Handling an exception 686
15
15.4. Спецификации исключений Exception specification 690
15.5. Специальные функции Special functions 698
15.5.1. Функция std::terminate() The std::terminate() function 698
15.5.2. Функция std::unexpected() The std::unexpected() function 699
15.5.3. Функция std::uncaught_exceptions() The std::uncaught_exceptions() function 700
16. ДИРЕКТИВЫ ПРЕПРОЦЕССИРОВАНИЯ PREPROCESSING DIRECTIVES 701
16.1. Условное включение Conditional inclusion 703
16.2. Включение исходных файлов Source file inclusion 705
16.3. Макроподстановка Macro replacement 707
16.3.1. Подстановка аргументов Argument substitution 710
16.3.2. Операция # The # operator 710
16.3.3. Операция ## The ## operator 711
16.3.4. Повторное сканирование и последующие замены Rescanning and further replacement 712
16.3.5. Область действия описаний макросов Scope of macro definitions 712
16.4. Управление строками Line control 715
16.5. Директива error Error directive 716
16.6. Директива pragma Pragma directive 716
16.7. Пустая директива Null directive 716
16.8. Предописанные имена макросов Predefined macro names 717
16.9. Операция Pragma Pragma operator 719
17. ВВЕДЕНИЕ В СТАНДАРТНУЮ БИБЛИОТЕКУ LIBRARY INTRODUCTION 720
17.1. Общие положения General 720
17.2. Стандартная библиотека С The C standard library 721
17.3. Определения Definitions 722
17.3.1. поток с произвольным позиционированием arbitrary-positional stream 722
17.3.2. блокировать block 722
17.3.3. блокированный поток blocked thread 722
17.3.4. символ character 722
17.3.5. тип символьного контейнера character container type 722
17.3.6. функция сравнения comparison function 722
17.3.7. компонент component 723
17.3.8. тупик deadlock 723
17.3.9. поведение по умолчанию default behavior 723
17.3.10. поведение по умолчанию default behavior 723
17.3.11. функция-обработчик handler function 723
17.3.12. шаблоны классов для потоков ввода-вывода iostream class templates 723
17.3.13. функция-модификатор modifier function 723
17.3.14. move construction конструирование перемещением 724
17.3.15. присваивание перемещением move assignment 724
17.3.16. состояние объекта object state 724
17.3.17. NTCTS 724
17.3.18. функция-наблюдатель observer function 724
16
17.3.19. referenceable type 724
17.3.20. заменяющая функция replacement function 724
17.3.21. поток с изменяемым позиционированием repositional stream 725
17.3.22. требуемое поведение required behavior 725
17.3.23. зарезервированная функция reserved function 725
17.3.24. стабильный алгоритм stable algorithm 725
17.3.25. класс-трейт traits class 725
17.3.26. разблокировка unblock 725
17.3.27. корректное, но неспецифицированное состояние valid but unspecified state 726
17.4. Дополнительные определения Additional definitions 726
17.5. Метод описания (информационный раздел) Method of description (Informative) 726
17.5.1. Структура каждой главы Structure of each clause 726
17.5.1.1. Элементы Elements 726
17.5.1.2. Краткое содержание Summary 726
17.5.1.3. Требования Requirements 727
17.5.1.4. Детальные спецификации Detailed specifications 728
17.5.1.5. Библиотека языка С C Library 730
17.5.2. Прочие соглашения Other conventions 730
17.5.2.1. Описания типов Type descriptions 730
17.5.2.1.1. Общие положения General 730
17.5.2.1.2. Перечислимые типы Enumerated types 730
17.5.2.1.3. Битовые маски Bitmask types 731
17.5.2.1.4. Последовательности символов Character sequences 732
17.5.2.1.4.1. Байтовые строки Byte strings 733
17.5.2.1.4.2. Многобайтовые строки Multibyte strings 733
17.5.2.2. Функции в классах Functions within classes 734
17.5.2.3. Приватные члены Private members 734
17.6. Требования на библиотеку в целом Library-wide requirements 734
17.6.1. Содержимое и организация библиотеки Library contents and organization 735
17.6.1.1. Содержимое библиотеки Library contents 735
17.6.1.2. Заголовочные файлы Headers 736
17.6.1.3. Независимые реализации Freestanding implementations 737
17.6.2. Использование библиотеки Using the library 738
17.6.2.1. Обзор Overview 738
17.6.2.2. Заголовочные файлы Headers 738
17.6.2.3. Связывание Linkage 738
17.6.3. Требования на типы и выраженния Requirements on types and expressions 739
17.6.3.1. Требования на аргументы шаблона Template argument requirements 739
17.6.3.2. Требования на типы и выражения, допускающие обмен значениями Swappable requirements 741
17.6.3.3. Требования NullablePointer NullablePointer requirements 743
17.6.3.4. Требования Hash Hash requirements 744
17.6.3.5. Требования к аллокаторам Allocator requirements 744
17.6.3.5.1. Требования к полноте аллокатора Allocator completeness requirements 750
17.6.4. Ограничения на программы Constraints on programs 751
17.6.4.1. Обзор Overview 751
17.6.4.2. Использование пространств имен Namespace use 751
17.6.4.2.1. Пространство имен std Namespace std 751
17.6.4.2.2. Пространство имен posix Namespace posix 752
17.6.4.3. Зарезервированные имена Reserved names 752
17.6.4.3.1. Имена макросов Macro names 752
17.6.4.3.2. Внешнее связывание External linkage 752
17.6.4.3.3. Типы Types 753
17.6.4.3.4. Литеральные суффиксы, определенные пользователем User-defined literal suffixes 753
17.6.4.4. Заголовочные файлы Headers 753
17.6.4.5. Производные классы Derived classes 754
17
17.6.4.6. Замещающие функции Replacement functions 754
17.6.4.7. Функции-обработчики Handler functions 754
17.6.4.8. Прочие функции Other functions 755
17.6.4.9. Аргументы функций Function arguments 756
17.6.4.10. Разделяемые объекты и библиотека Shared objects and the library 756
17.6.4.11. Параграф «Требования» Required paragraph 757
17.6.5. Реализации, соответствующие стандарту Conforming implementations 757
17.6.5.1. Обзор Overview 757
17.6.5.2. Заголовочные файлы Headers 757
17.6.5.3. Ограничения на макроопределения Restrictions on macro definitions 758
17.6.5.4. Глобальные и неклассовые функции Global and non-member functions 758
17.6.5.5. Функции-члены Member functions 759
17.6.5.6. constexpr-функции и конструкторы constexpr functions and constructors 759
17.6.5.7. Требования к стабильным алгоритмам Requirements for stable algorithms 759
17.6.5.8. Повторная входимость Reentrancy 760
17.6.5.9. Предотвращение совместного доступа к данным Data race avoidance 760
17.6.5.10. Защита внутри классов Protection within classes 761
17.6.5.11. Производные классы Derived classes 761
17.6.5.12. Ограничения на обработку исключений Restrictions on exception handling 762
17.6.5.13. Ограничения на память для указателей Restrictions on storage of pointers 763
17.6.5.14. Значения кодов ошибок Value of error codes 763
17.6.5.15. Состояние перемещаемых объектов библиотечных типов Moved-from state of library types 763
18. БИБЛИОТЕКА ПОДДЕРЖКИ ЯЗЫКА LANGUAGE SUPPORT LIBRARY 764
18.1. Общие положения General 764
18.2. Типы Types 765
18.3. Свойства реализации Implementation properties 766
18.3.1. Общие положения In General 766
18.3.2. Числовые пределы Numeric limits 766
18.3.2.1. Шаблон класса numeric_limits Class template numeric_limits 766
18.3.2.2. Состав заголовочного файла Header synopsis 767
18.3.2.3. Шаблон класса numeric_limits Class template numeric_limits 767
18.3.2.4. Члены шаблона numeric_limits Numeric_limits members 768
18.3.2.5. Тип float_round_style Type float_round_style 774
18.3.2.6. Тип float_denorm_style Type float_denorm_style 774
18.3.2.7. Специализации numeric_limits numeric_limits specializations 775
18.3.3. Библиотека языка С C Library 777
18.4. Целые типы Integer types 778
18.4.1. Состав заголовочного файла Header synopsis 778
18.5. Старт и завершение Start and termination 779
18.6. Управление динамической памятью Dynamic memory management 782
18.6.1. Отведение и освобождение памяти Storage allocation and deallocation 782
18.6.1.1. Формы для единичных объектов Single-object forms 782
18.6.1.2. Формы для массивов Array forms 785
18.6.1.3. Формы с размещением Placement forms 787
18.6.1.4. Совместный доступ к данным Data races 788
18.6.2. Ошибки отведения памяти Storage allocation errors 789
18.6.2.1. Класс bad_alloc Class bad_alloc 789
18.6.2.2. Класс bad_array_new_length Class bad_array_new_length 789
18.6.2.3. Тип new_handler Type new_handler 790
18.6.2.4. set_new_handler 790
18.6.2.5. get_new_handler 790
18
18.7. Идентификация типов Type identification 790
18.7.1. Класс type_info Class info_type 791
18.7.2. Класс bad_cast Class bad_cast 792
18.7.3. Класс bad_typeid Class bad_typeid 792
18.8. Обработка исключительных ситуаций Exception handling 793
18.8.1. Класс exception Class exception 794
18.8.2. Класс bad_exception Class bad_exception 795
18.8.3. Аварийное завершение Abnormal termination 795
18.8.3.1. Тип terminate_handler Type terminate_handler 795
18.8.3.2. set_terminate 796
18.8.3.3. get_terminate 796
18.8.3.4. terminate 796
18.8.4. uncaught_exceptions 796
18.8.5. Распространение исключительной ситуации Exception propagation 796
18.8.6. Класс nested_exception Class nested_exception 798
18.9. Списки инициализаторов Initializer lists 799
18.9.1. Конструкторы для инициализации списков Initializer list constructors 800
18.9.2. Доступ к элементам списков Initializer list access 800
18.9.3. Доступ к диапазону списков инициализаторов Initializer list range access 800
18.10. Прочие средства поддержки времени выполнения Other runtime support 801
ПРИЛОЖЕНИЕ A СВОДКА СИНТАКСИЧЕСКИХ ПРАВИЛ 804
A.1 Служебные слова 804
A.2 Лексические соглашения 804
A.3 Основные понятия 810
A.4 Выражения 810
A.5 Операторы 814
A.6 Объявления 816
A.7 Описатели 821
A.8 Классы 823
A.9 Производные классы 824
A.10 Специальные функции-члены 825
A.11 Совместное использование 825
A.12 Шаблоны 826
A.13 Обработка исключительных ситуаций 827
A.14 Директивы препроцессирования 828
ПРИЛОЖЕНИЕ B ГЛОССАРИЙ ТЕРМИНОВ ЯЗЫКА С++ 830