Dlaczego string::comparezwraca intzamiast mniejszego typu, jak shortlub char? Rozumiem, że ta metoda zwraca tylko -1, 0 lub 1.
Druga część, gdybym miał zaprojektować metodę porównania, która porównuje dwa obiekty typu Fooi chciałbym zwrócić tylko -1, 0 lub 1, czy użycie shortlub charogólnie byłoby dobrym pomysłem?
EDYCJA: Zostałem poprawiony, string::comparenie zwraca -1, 0 ani 1, w rzeczywistości zwraca wartość> 0, <0 lub 0. Dzięki za trzymanie mnie w kolejce.
Wygląda na to, że odpowiedź jest mniej więcej taka, że nie ma powodu, aby zwracać typ mniejszy niż intdlatego, że zwracane wartości to „rvalues”, a te „rvalues” nie korzystają z tego, że są mniejsze niż typ int (4 bajty). Wiele osób wskazywało również, że rejestry większości systemów prawdopodobnie i tak będą miały rozmiar int, ponieważ te rejestry będą wypełnione bez względu na to, czy dasz im wartość 1, 2 czy 4 bajty, nie ma realnej korzyści z zwracania wartości mniejsza wartość.
EDYCJA 2: W rzeczywistości wygląda na to, że przy użyciu mniejszych typów danych, takich jak wyrównanie, maskowanie itp., Może wystąpić dodatkowe obciążenie związane z przetwarzaniem. Ogólny konsensus jest taki, że mniejsze typy danych istnieją, aby oszczędzać pamięć podczas pracy z dużą ilością danych, jak w przypadek tablicy.
Nauczyłem się czegoś dzisiaj, jeszcze raz dziękuję chłopaki!
string::compare()której
shortlub charzamiast int? Większość architektur będzie przechowywać zwracaną wartość funkcji w rejestrze, a intznak będzie pasował do rejestru tak samo dobrze, jak shortlub char. A używanie chardla typów liczbowych jest zawsze złym pomysłem, zwłaszcza gdy trzeba zagwarantować, że podpisane wartości są obsługiwane poprawnie.
charbyłoby złym pomysłem, ponieważ sprawdzanie kodu pod kątem wartości zwracanej, jeśli jest mniejsza od zera, zakończy się niepowodzeniem na platformach, na których charjest bez znaku.