Perché string::comparerestituisce un intinvece di un tipo più piccolo come shorto char? La mia comprensione è che questo metodo restituisce solo -1, 0 o 1.
Seconda parte, se dovessi progettare un metodo di confronto che confronta due oggetti di tipo Fooe volessi solo restituire -1, 0 o 1, sarebbe usare shorto in chargenerale sarebbe una buona idea?
EDIT: Sono stato corretto, string::comparenon restituisce -1, 0 o 1, in effetti restituisce un valore> 0, <0 o 0. Grazie per avermi tenuto in linea ragazzi.
Sembra che la risposta sia approssimativamente, non c'è motivo di restituire un tipo più piccolo di intperché i valori di ritorno sono "rvalues" e questi "rvalues" non traggono vantaggio dall'essere più piccoli del tipo int (4 byte). Inoltre, molte persone hanno sottolineato che i registri della maggior parte dei sistemi probabilmente avranno intcomunque le dimensioni , poiché questi registri verranno riempiti sia che si dia loro un valore di 1, 2 o 4 byte, non c'è alcun vantaggio reale nel restituire un valore minore.
MODIFICA 2: In effetti sembra che ci possa essere un sovraccarico di elaborazione aggiuntivo quando si utilizzano tipi di dati più piccoli come allineamento, mascheramento, ecc. Il consenso generale è che i tipi di dati più piccoli esistono per conservare la memoria quando si lavora con molti dati, come nel caso di un array.
Ho imparato qualcosa oggi, grazie ancora ragazzi!
string::compare()collegamento indica chiaramente che il valore restituito è <0, 0 e> 0 -not- -1, 0 e 1.
shorto charinvece di int? La maggior parte delle architetture memorizzerà il valore di ritorno di una funzione in un registro e an intsi adatterà a un registro allo stesso modo di un shorto char. E l'utilizzo charper i tipi numerici è sempre una cattiva idea, soprattutto quando è necessario garantire che i valori con segno siano gestiti correttamente.
charsarebbe una cattiva idea, poiché il controllo del codice per il valore restituito se è inferiore a zero fallirà sulle piattaforme in cui charnon è firmato.