Точка, которую автор делает, заключается в том, что компилятор, если он этого пожелает, мог реализовать внутри компилятора #include <string>
, без какого-либо файла с именем string
в системе, которая компилирует ваш код. На самом деле, я не знаю ни одного компилятора, который реализует это, но это, безусловно, жизнеспособно из того, что смотрит на стандарты C++.
Каждый поставщик компилятора, такой как GNU и Free Software Foundation для gcc, люди из Университета штата Иллинойс за clang, люди из Microsoft, Borland, IBM, Intel и т. Д., Которые производят компилятор, будут производить «реализацию» компилятор. Если я напишу свой собственный компилятор C++, который будет реализацией. У меня есть свой собственный компилятор для языка Pascal (написанный на C++ и использующий LLVM в качестве бэкэнд), который является реализацией языка Pascal, - и, как и все реализации, он соответствует стандарту, но имеет некоторые функции, определенные реализацией , Все реализации будут иметь некоторые вещи, которые «на основе того, что реализатор решили сделать», несколько возможных причин:
- Стандарт не специфична: размер
int
или Паскаля integer
не указана за «должно быть по крайней мере, этого большого ... », так что, пока выполняются минимальные критерии, разработчик может делать то, что он/она/они выбирают.
- Расширения - что-то, что выходит за рамки стандарта.Часто стандарт имеет ограничения или недостающие функциональные возможности, которые разработчик может решить «улучшить» (это делает реализацию «нестандартной», но если расширение не изменяет поведение стандартно совместимого кода, оно «безопасно» для добавления) [например, у Паскаля нет «имен в файлах», поэтому программа Pascal не может создать файл по определенному имени - большинство реализаций имеют НЕКОТОРЫЙ способ создать файл по определенному имени в качестве расширения]
- Стандарт определяет «поведение, определяемое реализацией» - аналогично неспецифическому, стандарт может сказать, что «это зависит от того, что разработчик должен делать, как он/она/они хотят».
Код :: Blocks - это [IDE, а не компилятор] (http://wiki.codeblocks.org/index.php?title=FAQ-General#Q:_What_Code::Blocks_is_not.3F) (таким образом а не реализация C++). – melpomene
Пожалуйста, укажите причину падения. – YakRangi
@melpomene thats, что я спрашиваю, что на самом деле реализация ?? – YakRangi