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

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


[EDIT]

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

Ответы (2)

std::size_t - это типизация для фундаментального типа 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 чрезвычайно полезен. Он гарантированно может хранить размер любого объекта или любой допустимый индекс массива. Его отсутствие значительно усложнило бы написание переносимых, но эффективных программ.

2022 WebDevInsider