Pourquoi string::comparerenvoie un intau lieu d'un type plus petit comme shortou char? Je crois comprendre que cette méthode ne renvoie que -1, 0 ou 1.
Deuxième partie, si je devais concevoir une méthode de comparaison qui compare deux objets de type Fooet que je ne voulais renvoyer que -1, 0 ou 1, est-ce que l'utilisation shortou chargénéralement serait une bonne idée?
EDIT: J'ai été corrigé, string::comparene renvoie pas -1, 0 ou 1, il renvoie en fait une valeur> 0, <0 ou 0. Merci de me garder en ligne les gars.
Il semble que la réponse soit approximativement, il n'y a aucune raison de renvoyer un type plus petit que intparce que les valeurs de retour sont des "rvalues" et que ces "rvalues" ne bénéficient pas d'être plus petites que le type int (4 octets). En outre, de nombreuses personnes ont souligné que les registres de la plupart des systèmes seront probablement de inttoute façon de toute façon, puisque ces registres vont être remplis que vous leur donniez une valeur de 1, 2 ou 4 octets, il n'y a pas de réel avantage à renvoyer un plus petite valeur.
EDIT 2: En fait, il semble qu'il puisse y avoir une surcharge de traitement supplémentaire lors de l'utilisation de types de données plus petits tels que l'alignement, le masquage, etc. Le consensus général est que les plus petits types de données existent pour économiser la mémoire lorsque vous travaillez avec beaucoup de données, comme dans le cas d'un tableau.
J'ai appris quelque chose aujourd'hui, merci encore les gars!
string::compare()vous lien vers indique clairement que la valeur de retour est <0, 0 et> 0 -pas- -1, 0 et 1.
shortou à la charplace de int? La plupart des architectures vont stocker la valeur de retour d'une fonction dans un registre, et un intrentrera dans un registre aussi bien qu'un shortou char. Et utiliser charpour les types numériques est toujours une mauvaise idée, en particulier lorsque vous devez garantir que les valeurs signées sont gérées correctement.
charserait une mauvaise idée, car la vérification du code pour la valeur de retour si elle est inférieure à zéro échouera sur les plates-formes où charn'est pas signé.