Позвольте мне начать с объяснения того, что я имею в виду под словом «магия». Я буду использовать два примера из Java:
- Каждый класс наследует (прямо или косвенно) класс
Object
. - Перегрузка операторов не поддерживается Java, но оператор
+
определен дляString
объектов.
Это означает, что реализовать классы Object
и String
на чистом (*) Java невозможно. Вот что я имею в виду под «магией»: чтобы реализовать эти классы, вам понадобится специальная поддержка со стороны компилятора.
Что мне всегда нравилось в C++, так это то, что, насколько мне известно, в STL не происходит такого «волшебства», т.е. STL можно реализовать на чистом C++.
Теперь мой вопрос: это правда? Или есть части STL, которые не могут быть реализованы на чистом C++ и нуждаются в какой-то «волшебной»/специальной поддержке компилятора?
(*) Под «чистым» я подразумеваю без использования каких-либо библиотек классов.