Cada vez que hago un fragmento rápida de C++ línea de código¿Por qué hay dos funciones getline() diferentes (si es que las hay)?
std::string s;
cin >> s;
Me maldigo porque se me olvidó que se detenga en el espacio en blanco en lugar de obtener una línea completa.
Luego, en recordar getline
, invariablemente se confunden en cuanto a las dos variedades:
std::string s;
getline (std::cin, s);
y:
char cs[256];
std::cin.getline (cs, sizeof (cs));
¿Existe realmente una diferencia entre estos dos que no sea el tipo de datos?
Me parece que la forma C++ debe ser la primera. ¿Bajo qué circunstancias usaría este último, dado que probablemente debería estar usando cadenas reales en su lugar de matrices de caracteres terminados en nulo?
Y, dado que la entrada debería ser realmente el ámbito de las secuencias de entrada, ¿por qué no es la parte anterior de istream
?
Creo que la frase está "vagamente acoplada", "mal integrada" tiene connotaciones negativas. Creo que es una buena cosa (tm) que puedas usar 'std :: string' sin necesidad de' std :: istream' y usar 'std :: istream' sin necesidad de' std :: string'. –
@Charles: ¿me creerías si te dijera que hice el cambio exactamente opuesto antes de presionar "enviar" :)? Yo personalmente hubiera preferido una biblioteca estándar más "uniforme". La biblioteca estándar de C++ es el epítome del "crecimiento orgánico". –
@Charles: Definitivamente creo que está mal que iostreams y string no estén acoplados. Quiero decir, iostream depende de la manipulación de cadenas, en un nivel básico. Reducir las dependencias es una cosa, proporcionar funciones miembro que funcionen con C-string es inexcusable si no eres la clase de cadena. – Puppy