Соглашения библиотеки C++
Библиотека C++ в основном подчиняется тем же правилам, что и стандартная библиотека C, и нескольким дополнительным правилам, приведенным здесь.
Реализация обладает определенной свободой в способе объявления типов и функций в библиотеке C++.
Имена функций в стандартной библиотеке C могут иметь либо extern "C++" или extern "C". Включайте соответствующий заголовок стандартного C, а не объявляйте встроенную сущность библиотеки.
Имя функции-члена в классе библиотеки может иметь дополнительные сигнатуры функций помимо перечисленных в этом документе. Вы можете не сомневаться, что вызов функции, описанный здесь, будет действовать так, как ожидается, но не можете надежно получить адрес функции-члена библиотеки. (Тип может оказаться непредвиденным.)
Класс библиотеки может иметь недокументированные (невиртуальные) базовые классы. Класс, задокументированный как производный от другого класса, на самом деле может быть производным от этого класса через другие недокументированные классы.
Тип, определенный как синоним для некоторого целочисленного типа может быть таким же, как один из нескольких целочисленных типов.
Тип битовой маски может быть реализован как целочисленный тип или как перечисление. В любом случае вы можете выполнять побитовые операции (такие как
AND
иOR
) со значениями того же типа битовой маски. ЭлементыA
иB
тип битовой маски — это ненулевое значение, котороеA
равноB
нулю.Функция библиотеки без спецификации исключений может создать произвольное исключение, если ее определение не ограничивает четко такую возможность.
С другой стороны, существуют следующие ограничения.
Стандартная библиотека C не использует макросы маскирования. Зарезервированными являются только специальные сигнатуры функций, а не имена самих функций.
Имя функции библиотеки вне класса не будет иметь дополнительные недокументированные сигнатуры функции. Вы можете надежно получить его адрес.
Базовые классы и функции-члены, описанные как виртуальные, являются несомненно виртуальными, а описанные как невиртуальные — несомненно невиртуальными.
Два типа, определенные в библиотеке C++, всегда отличаются, если только в этом документе явно не предполагается иное.
Функции, предоставляемые библиотекой, включая версии заменяемых функций по умолчанию, могут создавать только те исключения, которые перечислены в спецификации исключений. Никакие деструкторы, предоставляемые библиотекой, не создают исключения. Функции в стандартной библиотеке C могут распространять исключение, как, например,
qsort
вызывает функцию сравнения, которая создает исключение, но они не создают исключения никаким иным образом.
См. также
Общие сведения о стандартной библиотеке C++
Потокобезопасность в стандартной библиотеке C++