Должна ли стандартная библиотека C ++ быть реализована в C ++? - PullRequest
12 голосов
/ 06 февраля 2012
  1. Должна ли быть реализована соответствующая реализация стандартной библиотеки C ++ в C ++?
  2. Если нет, то разрешено ли делать магические вещи, которые невозможно выполнить в чистом C ++ и стандартной библиотеке, а также поведение, определенное реализацией?

  • Мне известно, что существуют параллельные реализации, которые полагаются на расширения (по крайней мере, до C ++ 11), но действительно ли они соответствуют?
  • Я не смог найти никаких требований в стандарте, но, возможно, мой стандарт-фу слаб сегодня

Ответы [ 3 ]

19 голосов
/ 06 февраля 2012

Нет никакого требования, как реализована стандартная библиотека C ++ (или стандартная библиотека C в этом отношении).Все, что нужно библиотеке - это реализовать задокументированный и заданный интерфейс.Как это сделать, полностью зависит от реализации.Часть стандартных библиотек часто каким-то волшебным образом реализуется компилятором, и в C ++ 2011 есть несколько интерфейсов, которые на самом деле не могут быть реализованы с использованием стандартных языковых средств C ++ 2011!Прежде всего, это верно для некоторых черт в <type_traits>, но есть и другие вещи.

Просто для справки: как реализован C ++ и что на самом деле означает соответствие стандарту, считается крайне расплывчатым.Соответствующий пункт 1.4 [intro.compliance].Это просто говорит о диагностике и о том, что должна делать программа, однако об ограничении ресурсов.

9 голосов
/ 06 февраля 2012

номер

На самом деле, даже в стандарте предусмотрено, что #include <map> (например) может просто импортировать предварительно сохраненный AST и вообще не ссылаться на файл.

2 голосов
/ 06 февраля 2012

Совсем нет, только интерфейс должен быть C ++.

...