¿Por qué std::string tiene una función miembro length() además de size()?

Resuelto Naveen asked hace 15 años • 2 respuestas

Estaba leyendo las respuestas de ¿Cómo obtener la cantidad de caracteres en una cadena std::string? y descubrí que en realidad hay un método requerido length()( std::stringsiempre usé size()).

¿Existe alguna razón específica para tener esta función miembro en la std::stringclase? He leído MSDN y CppRefernce y parecen indicar que no hay diferencia entre size()y length(). Si es así, ¿no resulta más confuso para el usuario de la clase?

Naveen avatar May 25 '09 12:05 Naveen
Aceptado

Según la documentación , estos son solo sinónimos. size()debe ser coherente con otros contenedores STL (como vector, map, etc. ) y length()debe ser coherente con la noción intuitiva de cadenas de caracteres de la mayoría de las personas. La gente suele hablar de la longitud de una palabra, frase o párrafo , no de su tamaño, por lo que length()está ahí para hacer las cosas más legibles.

Todd Gamblin avatar May 25 '2009 05:05 Todd Gamblin

Ruby es igual, por cierto, ofrece ambos #length y #size como sinónimos de la cantidad de elementos en matrices y hashes (C++ solo lo hace para cadenas).

Los minimalistas y las personas que creen que "debería haber una, e idealmente sólo una, manera obvia de hacerlo" (como recita el Zen de Python), supongo que estarán en su mayoría de acuerdo con tus dudas, @Naveen, mientras que los fanáticos de Perl " Hay más de una forma de hacerlo" (o la sintaxis de SQL con millones de "palabras irrelevantes" opcionales que dan innumerables formas sintácticas idénticamente equivalentes para expresar un concepto) sin duda se quejarán de que Ruby, y especialmente C++, simplemente no llegan muy lejos. suficiente para ofrecer tal redundancia sinónima ;-).

Alex Martelli avatar May 25 '2009 06:05 Alex Martelli