Почему 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 байта, нет реального преимущества для возвращения меньшее значение.
РЕДАКТИРОВАТЬ 2: на самом деле, похоже, что при использовании меньших типов данных, таких как выравнивание, маскировка и т.д. могут быть дополнительные накладные расходы. Общий консенсус в том, что существуют меньшие типы данных для сохранения памяти при работе с большим количеством данных, как в случае массива.
Узнал что-то сегодня, еще раз спасибо ребятам!