¿Por qué Ostrream :: Operator << una función global para los parámetros de char?
Pregunta
De acuerdo con http://www.cplusplus.com/reference/iostream/ostream/operator%3C%3C/ El método del operador << definido en EG StreamBuf es un miembro de Ostream, pero para Char / Char * es una función global. ¿Cuál es la decisión de diseño detrás de esta diferencia?
Solución
operator<<
por streambuf*
(o int
que suena un caso más simple) y char
podrían haberse implementado como operadores miembros, o como operadores no miembros (gratuitos).
Supongo que se debe a que surgieron problemas de retrocompatibilidad mientras C ++ se definía: tal vez el código más antiguo transmitía a un miembro operator<<(int)
, y así decidieron no moverlo como operador libre.
La biblioteca estándar C ++ (y también STL) tiene una serie de Dishomogeneidad como esta.