Чому string::compareповертається intзамість меншого типу типу shortабо char? Я розумію, що цей метод повертає лише -1, 0 або 1.
Друга частина, якби я створив метод порівняння, який порівнював два об'єкти типу, Fooі я хотів повернути лише -1, 0 або 1, використовував би shortчи charвзагалі хорошу ідею?
EDIT: Мені виправлено, string::compareне повертає -1, 0 або 1, він фактично повертає значення> 0, <0 або 0. Дякую за те, що тримаєте мене в черзі, хлопці.
Здається, що відповідь приблизно, немає причин повертати тип менше, ніж intтому, що значення повернення є "rvalues", а ті "rvalues" не мають користі від того, щоб бути меншими за тип int (4 байти). Крім того, багато людей вказували, що регістри більшості систем, ймовірно, будуть такими ж розмірами int, оскільки ці регістри заповнюватимуться, надаючи їм значення 1, 2 або 4 байтів, немає реальної переваги поверненню менше значення.
EDIT 2: Насправді, схоже, може бути додаткова обробка накладних даних при використанні менших типів даних, таких як вирівнювання, маскування тощо. Загальний консенсус полягає в тому, що існують менші типи даних для збереження пам’яті при роботі з великою кількістю даних, як у випадок масиву.
Навчився чогось сьогодні, ще раз дякую хлопці!
string::compare()яку ви посилаєтесь, чітко зазначено, що повернене значення <0, 0 і> 0 -не- -1, 0 і 1.
shortабо charзамість цього int? Більшість архітектур збираються зберігати значення, що повертається функції в регістрі, і intпоміщаються в регістрі точно так же , як shortі char. І використовувати charдля числових типів завжди погана ідея, особливо коли потрібно гарантувати, що підписані значення обробляються правильно.
charбуло б поганою ідеєю, оскільки перевірка коду на повернене значення, якщо воно менше нуля, не вдасться на платформах, де charне підписано.