Я инженер-электрик обратился к компьютерному ученому. Мне действительно трудно понять, почему в C ++ есть так много вещей, которые почти одинаковы, но не полностью одинаковы. Примером является short
против int
против unsigned int
против size_t
против long int
против long long int
против uint8_t
(Я не знаю, есть ли дополнительный способ обозначить целое число). Кажется, что это делает язык излишне сложным.
Мог или должен size_t
заменить или у него есть какая-либо функция, которую невозможно использовать другим способом?
После полезных ответов есть кое-что, что я до сих пор не вижу полностью. size_t
полезно с точки зрения портативности и производительности, как предложили несколько человек. Но насколько полезно, есть ли количественный способ или численное доказательство, чтобы измерить преимущества по сравнению только с int
и на пенсию всех своих братьев ???
std::size_t
является typedef для unsigned
основной тип, и он должен быть в состоянии представить любой возможный индекс / размер в вашей программе (технически, это также результат sizeof
оператор). Его базовый базовый тип может отличаться в разных реализациях, и поскольку вы хотите переносимости, вы используете std::size_t
и не волнует, будь то unsigned long int
или же unsigned long long int
и т.п.
std::size_t
не использует функция, которую невозможно использовать другим способом, это просто удобный псевдоним типа и ничего более.
В ответ на редактирование ОП
@HoapHumanoid Редактирование не очень хороший вопрос для StackOverflow, так как это вопрос личной интерпретации / предпочтений. Конечно, у вас может быть только один числовой тип или тип с фиксированным размером, однако, когда вы хотите выжать как можно больше производительности из вашего процессора, вам лучше иметь много, каждый из которых способен представлять определенный диапазон, в зависимости от физическое Платформа. Поскольку компьютерные архитектуры сильно различаются, каждая архитектура будет навязывать свой собственный размер, например int
, long
и т. д. Когда вы объединяете эту проблему с переносимостью, тогда size_t
появляется естественно. Что еще вы бы использовали в универсальной функции, например, это гарантия выделить как можно больше памяти на каждую возможную реализацию? Вы бы использовали int
передать количество байтов? Или, может быть long int
? Вам необходимо прочитать руководство по компилятору, проверить соответствующий тип и т. Д., А затем использовать его. Вот что делает для вас реализация C ++, определяет соответствующий такой тип.
Ты забыл long long int
большинство неподписанных версий, uint8_t
и друзья, и, возможно, еще немного. 🙂
В некоторых языках размер целочисленных типов фиксирован. C ++ не является одним из них; Программисту предоставляется большая гибкость, позволяющая сбалансировать производительность с размером и диапазоном.
Но size_t
очень полезно. Гарантируется, что он может содержать размер любого объекта или любого допустимого индекса массива. Отсутствие этого затруднило бы написание портативных, но эффективных программ.