2010-11-05 11 views
5

Tengo curiosidad acerca de la razón técnica para cin.getline y la función global getline está en diferentes lugares.¿Por qué std :: cin.getline no tiene un método oveloaded para tomar std :: string?

¿Cuál fue la motivación para no simplemente la definición de todas estas firmas de función para cin:

//THESE TWO EXIST 
istream& cin::getline (char* s, streamsize n); 
istream& cin::getline (char* s, streamsize n, char delim); 

//THESE TWO COULD EXIST 
istream& cin::getline (string &s); 
istream& cin::getline (string &s, char delim); 

Fue porque otros tipos pueden querer ser añadido y que no quería casarse con la cadena a CIN?

+0

posible duplicado de [¿Por qué no las clases std :: fstream tomar un std :: string?] (Http://stackoverflow.com/questions/32332/why-dont-the-stdfstream-classes-take- a-stdstring) – wilhelmtell

+0

@wilhelmtell: Esto parece una pregunta completamente diferente. – UncleBens

+0

@UncleBens la pregunta es muy similar, incluso si los nombres son diferentes. La respuesta debería ser (casi) idéntica. – wilhelmtell

Respuesta

4

Véase mi respuesta para a similar question. Podría ser un descuido por parte del comité de estándares de C++, pero también se puede explicar con preocupaciones de dependencia. Si el estándar requeriría sobrecargas de función para std::string en el encabezado <iostream>, entonces requeriría implementadores para #include<string> en <iostream>. Es un requisito de dependencia, lo que ralentizaría aún más la compilación de todo lo que requiera <iostream>, incluso si una unidad de compilación no necesita std::string.

Tenga en cuenta que, por otro lado, el encabezado <string> tiene funciones que toman como referencia std::basic_istream<> y std::basic_ostream<>; pero el estándar también requiere un encabezado denominado <iosfwd> que reenvía-declara todas las instalaciones IO, haciendo que el encabezado <string> sea confiable en el encabezado rápido en tiempo de compilación <iosfwd>. Una dependencia al revés sería mucho más lenta de compilar.

0

Hay varios lugares donde el comité estándar de C++ en realidad no se optimizar la interacción entre instalaciones de la biblioteca estándar.

std :: string y su uso en la biblioteca es uno de ellos.

Otro ejemplo es std :: swap. Muchos contenedores tienen una función de miembro de intercambio , pero no se proporciona ninguna sobrecarga de std :: swap . Lo mismo ocurre con std :: sort.

espero que todas estas pequeñas cosas se fijos en el próximo estándar.

-Christopher

La adición de este post me encontré en este otro hilo, ya que parece relevante y aceptar una respuesta.

Cuestiones relacionadas