C++ IOStreams son ridículamente ineficaces (en la mayoría de las implementaciones que conozco). A menudo, eso no es una preocupación, pero cuando es, la biblioteca es básicamente inútil. También es un buen punto que la sintaxis no es intuitiva (y muy, muy prolija). La biblioteca es compleja e innecesariamente difícil de ampliar. Tampoco es muy flexible. Cuando se compara con algo como el STL, IOStreams realmente parece un mal sueño. Pero está aquí, y estamos atrapados con eso.
La razón por la que está aquí, y la razón por la que parece que lo hace, es que se desarrolló antes, antes de que C++ fuera un lenguaje maduro. Antes teníamos décadas de experiencia diciéndonos qué es y qué no es un buen diseño de la biblioteca. Antes de que alguien realmente supiera cuáles eran las opciones.
C++ necesitaba una biblioteca de E/S que fuera mejor que C. Y en algunas formas importantes, C++ IOStreams es mejor. Son tipogibles y extensibles, como otros han mencionado. Al implementar un solo operador, puedo imprimir una clase definida por el usuario. Eso no se pudo hacer con printf
. Tampoco tengo que preocuparme por equivocarme con los especificadores de formato e imprimir basura debido a la falta de seguridad del tipo.
Esos elementos necesarios por arreglar. Y bueno, en los primeros días, las funciones virtuales y la sobrecarga del operador eran la mierda. Se veía genial.Por supuesto, las bibliotecas querían usar esas características.
La biblioteca iostreams es un compromiso entre:
- algo más seguro y más extensible que de C
stdio.h
- algo eficiente
- algo bien diseñado e intuitivo
- una biblioteca que en realidad existía en el momento en que C++ se estaba estandarizando. (Tuvieron que añadir algo , por lo que tenían que elegir entre los candidatos que realmente existían en el momento.)
La biblioteca no logra todo esto, y creo que hoy en día, con nuestros décadas de experiencia con el lenguaje, podríamos haber diseñado una biblioteca mucho mejor. Pero a mediados de los 90, cuando buscaban una biblioteca de E/S para agregar, era lo mejor que podían encontrar.
La eficiencia no es realmente una preocupación, ya que el 99% del tiempo se gastará en las mismas llamadas al sistema operativo para imprimir en la consola –
¿Qué abstracciones de cadena? –
-1 hey boy, supongo que eres un principiante en el mundo C++. ¿Cómo puede decir que es menos eficiente si no lo sabe? Antes de la crítica, por favor, aprenda y sea modesto. –