Por que string::compareretorna um em intvez de um tipo menor como shortou char? Meu entendimento é que esse método retorna apenas -1, 0 ou 1.
Segunda parte, se eu fosse projetar um método de comparação que compare dois objetos do tipo Fooe quisesse apenas retornar -1, 0 ou 1, usar shortou chargeralmente seria uma boa ideia?
EDIT: Fui corrigido, string::comparenão retorna -1, 0 ou 1, na verdade retorna um valor> 0, <0 ou 0. Obrigado por me manter na linha, pessoal.
Parece que a resposta é aproximadamente, não há razão para retornar um tipo menor do que intporque os valores de retorno são "rvalues" e esses "rvalues" não se beneficiam de serem menores do que o tipo int (4 bytes). Além disso, muitas pessoas apontaram que os registros da maioria dos sistemas provavelmente serão de tamanho de intqualquer maneira, uma vez que esses registros serão preenchidos independentemente de você dar a eles um valor de 1, 2 ou 4 bytes, não há nenhuma vantagem real em retornar um valor menor.
EDIT 2: Na verdade, parece que pode haver sobrecarga de processamento extra ao usar tipos de dados menores, como alinhamento, mascaramento, etc. O consenso geral é que os tipos de dados menores existem para economizar memória ao trabalhar com muitos dados, como no caso de uma matriz.
Aprendi algo hoje, obrigado novamente pessoal!
string::compare()seu link afirma claramente que o valor de retorno é <0, 0 e> 0 -não- -1, 0 e 1.
shortou em charvez de int? A maioria das arquiteturas vai armazenar o valor de retorno de uma função em um registro, e um intcaberá em um registro tão bem quanto um shortou char. E usar charpara tipos numéricos é sempre uma má ideia, especialmente quando você precisa garantir que os valores assinados sejam tratados corretamente.
charseria uma má ideia, uma vez que a verificação do código do valor de retorno se for menor que zero irá falhar em plataformas onde charnão está assinado.