Почему Ostream :: Operator << глобальная функция для параметров ChAR?
Вопрос
В соответствии с http://www.cplusplus.com/reference/iostream/ostream/operator%3C%3C/ Метод оператора <<, определенный на EG Streambuf, является членом Ostream, но для char / char * это глобальная функция. Какое решение дизайна стоит за этой разницей?
Решение
operator<<
за streambuf*
(или же int
который звучит более простой случай) и char
могли быть реализованы как операторами-членами, либо в качестве операторов, не относящихся к членам (бесплатно).
Я предполагаю, что это связано с проблемами в ретро-совместимости, возникающих при определении C ++: может быть, старый код решал на участнике operator<<(int)
, и, таким образом, они решили не перемещать его в качестве свободного оператора.
Стандартная библиотека C ++ (а также STL) обладает множеством недостатков, подобной этой.