¿Por qué string::comparedevuelve un en intlugar de un tipo más pequeño como shorto char? Tengo entendido que este método solo devuelve -1, 0 o 1.
Segunda parte, si tuviera que diseñar un método de comparación que compare dos objetos de tipo Fooy solo quisiera devolver -1, 0 o 1, ¿ sería una buena idea usar shorto en chargeneral?
EDITAR: Me han corregido, string::compareno devuelve -1, 0 o 1, de hecho devuelve un valor> 0, <0 o 0. Gracias por mantenerme en línea, chicos.
Parece que la respuesta es aproximadamente, no hay razón para devolver un tipo más pequeño que intporque los valores devueltos son "rvalues" y esos "rvalues" no se benefician de ser más pequeños que el tipo int (4 bytes). Además, muchas personas señalaron que los registros de la mayoría de los sistemas probablemente serán de tamaño grande de inttodos modos, ya que estos registros se llenarán si les da un valor de 1, 2 o 4 bytes, no hay una ventaja real en devolver un menor valor.
EDICIÓN 2: De hecho, parece que puede haber una sobrecarga de procesamiento adicional cuando se utilizan tipos de datos más pequeños, como alineación, enmascaramiento, etc. El consenso general es que los tipos de datos más pequeños existen para conservar la memoria cuando se trabaja con muchos datos, como en el caso de una matriz.
Aprendí algo hoy, ¡gracias de nuevo chicos!
string::compare()su enlace establece claramente que el valor de retorno es <0, 0 y> 0 -no- -1, 0 y 1.
shorto en charlugar de int? La mayoría de las arquitecturas almacenarán el valor de retorno de una función en un registro, y una intencajará en un registro tan bien como una shorto char. Y usar charpara tipos numéricos siempre es una mala idea, especialmente cuando necesita garantizar que los valores firmados se manejen correctamente.
charsería una mala idea, ya que la verificación del código para el valor de retorno si es menor que cero fallará en plataformas donde charno esté firmado.