La función getline
tiene un character version que es una función miembro, así como un global version que toma cadenas. ¿Por qué no son ambas funciones miembro? La forma actual hace que parezca que no hay una versión de cadena.¿Por qué la versión de cadena de getline es una función no miembro?
Respuesta
istream& istream::getline(char* s, streamsize n)
es parte de la interfaz de transmisión.
istream& getline(istream& is, string& str)
es un método extensión desde la string
biblioteca (al igual que el istream &operator>>(istream&, string&)
).
Este diseño probablemente fue elegido con el fin de desacoplar iostreams de cadena, como también fstream::open()
no toma std::string
argumentos, sino más bien const char*
.
Porque la implementación de las clases iostream no debe depender de las cadenas.
El problema con la biblioteca de secuencias es que no está bien diseñado. En particular, la función miembro getline
no debería estar allí en absoluto. La función gratuita getline
es la correcta para usar, tiene varias ventajas: no es una función de miembro, es segura, no funciona en búferes crudos, y no requiere conjeturas.
Es necesario mencionar que las funciones gratuitas y de miembro forman parte de la interfaz pública de istream.
- 1. ¿Por qué is_lock_free es una función miembro?
- 2. ¿Qué es una función de miembro no estático?
- 3. ¿Por qué Getline es tan inconsistente?
- 4. std no tiene ningún miembro 'getline'?
- 5. ¿Cuál es la diferencia entre una función de miembro const y una función de miembro no const?
- 6. ¿Por qué es posible llamar a la función miembro no estática sin una instancia de objeto?
- 7. ¿Cuál es la semántica de una función miembro miembro?
- 8. ¿Por qué .val() no es una función?
- 9. ¿Por qué jQuery.parseJSON no es una función?
- 10. ¿Qué no entiendo acerca de getline + strings?
- 11. ¿Por qué la función de miembro amigo no se reconoce como plantilla de función automáticamente?
- 12. Llamar a una función de miembro no const desde una función de miembro constante
- 13. comprobando eof en cadena :: getline
- 14. ¿Por qué no se puede usar una función no miembro para sobrecargar el operador de asignación?
- 15. ¿Por qué la impresión no es una función en python?
- 16. ¿Ventajas de utilizar una función miembro estática en lugar de una función miembro no estático equivalente?
- 17. ¿Por qué esta función miembro miembro permite modificar una variable miembro?
- 18. ¿Por qué este formato de cadena no es una moneda?
- 19. Sobrecarga del operador: función de miembro vs. función de no miembro?
- 20. ¿Por qué no agregaron una versión de operador de iota?
- 21. M2E: La versión está duplicada de la versión principal. ¿Por qué es esto una advertencia?
- 22. por qué un objeto volátil no puede llamar a la función miembro no volátil
- 23. ¿Por qué no hay una función para cada miembro para cada tipo de colección en stl?
- 24. Miembro no estático como argumento predeterminado de una función miembro no estática
- 25. La función de miembro de clase anidada no puede acceder a la función de clase adjunta. ¿Por qué?
- 26. getline no pide entrada?
- 27. ¿Por qué es gcc usando JMP para llamar a una función en la versión optimizada
- 28. ¿Por qué la comparación de un puntero de función miembro a NULL genera una advertencia?
- 29. ¿Por qué numCapabilities es una función pura?
- 30. ¿Por qué esta función amiga no puede acceder a un miembro privado de la clase?
Si bien puede ser contra intuitivo al principio, hay autores que respaldan la idea de que la forma más orientada a objetos de agregar funcionalidad a una clase es a través de funciones gratuitas. Lea este [Gurú de la semana # 84] (http://www.gotw.ca/gotw/084.htm). La pregunta podría convertirse en * ¿por qué algunas de las funciones de miembros de la biblioteca no son funciones gratuitas? * –