Поделиться через


Соглашения библиотеки C++

Библиотека C++ в основном подчиняется тем же правилам, что и стандартная библиотека C, и нескольким дополнительным правилам, приведенным здесь.

Реализация обладает определенной свободой в способе объявления типов и функций в библиотеке C++.

  • Имена функций в стандартной библиотеке C могут иметь либо extern "C++" или extern "C". Включайте соответствующий заголовок стандартного C, а не объявляйте встроенную сущность библиотеки.

  • Имя функции-члена в классе библиотеки может иметь дополнительные сигнатуры функций помимо перечисленных в этом документе. Вы можете не сомневаться, что вызов функции, описанный здесь, будет действовать так, как ожидается, но не можете надежно получить адрес функции-члена библиотеки. (Тип может оказаться непредвиденным.)

  • Класс библиотеки может иметь недокументированные (невиртуальные) базовые классы. Класс, задокументированный как производный от другого класса, на самом деле может быть производным от этого класса через другие недокументированные классы.

  • Тип, определенный как синоним для некоторого целочисленного типа может быть таким же, как один из нескольких целочисленных типов.

  • Тип битовой маски может быть реализован как целочисленный тип или как перечисление. В любом случае вы можете выполнять побитовые операции (такие как AND и OR) со значениями того же типа битовой маски. Элементы A и B тип битовой маски — это ненулевое значение, которое A равно B нулю.

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

С другой стороны, существуют следующие ограничения.

  • Стандартная библиотека C не использует макросы маскирования. Зарезервированными являются только специальные сигнатуры функций, а не имена самих функций.

  • Имя функции библиотеки вне класса не будет иметь дополнительные недокументированные сигнатуры функции. Вы можете надежно получить его адрес.

  • Базовые классы и функции-члены, описанные как виртуальные, являются несомненно виртуальными, а описанные как невиртуальные — несомненно невиртуальными.

  • Два типа, определенные в библиотеке C++, всегда отличаются, если только в этом документе явно не предполагается иное.

  • Функции, предоставляемые библиотекой, включая версии заменяемых функций по умолчанию, могут создавать только те исключения, которые перечислены в спецификации исключений. Никакие деструкторы, предоставляемые библиотекой, не создают исключения. Функции в стандартной библиотеке C могут распространять исключение, как, например, qsort вызывает функцию сравнения, которая создает исключение, но они не создают исключения никаким иным образом.

См. также

Общие сведения о стандартной библиотеке C++
Потокобезопасность в стандартной библиотеке C++