Почему size_t существует в C / C ++ и может / должен быть заменен?

Я инженер-электрик обратился к компьютерному ученому. Мне действительно трудно понять, почему в C ++ есть так много вещей, которые почти одинаковы, но не полностью одинаковы. Примером является short против int против unsigned int против size_t против long int против long long int против uint8_t (Я не знаю, есть ли дополнительный способ обозначить целое число). Кажется, что это делает язык излишне сложным.

Мог или должен size_t заменить или у него есть какая-либо функция, которую невозможно использовать другим способом?


[РЕДАКТИРОВАТЬ]

После полезных ответов есть кое-что, что я до сих пор не вижу полностью. size_t полезно с точки зрения портативности и производительности, как предложили несколько человек. Но насколько полезно, есть ли количественный способ или численное доказательство, чтобы измерить преимущества по сравнению только с int и на пенсию всех своих братьев ???

7

Решение

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 ++, определяет соответствующий такой тип.

14

Другие решения

Ты забыл long long intбольшинство неподписанных версий, uint8_t и друзья, и, возможно, еще немного. 🙂

В некоторых языках размер целочисленных типов фиксирован. C ++ не является одним из них; Программисту предоставляется большая гибкость, позволяющая сбалансировать производительность с размером и диапазоном.

Но size_t очень полезно. Гарантируется, что он может содержать размер любого объекта или любого допустимого индекса массива. Отсутствие этого затруднило бы написание портативных, но эффективных программ.

2

По вопросам рекламы [email protected]