Подтвердить что ты не робот

Разница между size_t и unsigned int?

Я так запутался по поводу size_t. Я искал в Интернете и везде упоминал, что size_t является беззнаковым типом, поэтому он может представлять только неотрицательные значения.

Мой первый вопрос: если он используется для представления только неотрицательных значений, почему бы нам не использовать unsigned int вместо size_t?

Мой второй вопрос: взаимозаменяемы size_t и unsigned int или нет? Если нет, то почему?

И кто-нибудь может дать мне хороший пример size_t и кратко его работы?

4b9b3361

Ответ 1

если он используется для представления неотрицательного значения, так почему бы нам не использовать unsigned int вместо size_t

Потому что unsigned int - не единственный целочисленный тип без знака. size_t может быть любым из unsigned char, unsigned short, unsigned int, unsigned long или unsigned long long, в зависимости от реализации.

Второй вопрос, что size_t и unsigned int взаимозаменяемы или нет, и если нет, то почему?

Они не являются взаимозаменяемыми по причине, описанной выше ^^.

И кто-нибудь может дать мне хороший пример size_t и его краткой работы?

Я не совсем понимаю, что вы имеете в виду под "его краткой работой". Он работает как любой другой тип без знака (в частности, как тип, к которому он относится). Вам рекомендуется использовать size_t когда вы описываете размер объекта. В частности, оператор sizeof и различные стандартные библиотечные функции, такие как strlen(), возвращают size_t.

Бонус: здесь хорошая статья о size_t (и тесно связанном типе ptrdiff_t). Это очень хорошо объясняет, почему вы должны его использовать.

Ответ 2

В C:

существует 5 стандартных целочисленных типов без знака:
  • unsigned char
  • unsigned short
  • unsigned int
  • unsigned long
  • unsigned long long

с различными требованиями к их размерам и диапазонам (вкратце, каждый диапазон типов является подмножеством следующего типа, но некоторые из них могут иметь одинаковый диапазон).

size_t - это typedef (т.е. псевдоним) для некоторого неподписанного типа (возможно, один из перечисленных выше, но возможно расширенный целочисленный тип без знака, хотя это маловероятно). Это тип, заданный оператором sizeof.

В одной системе может иметь смысл использовать unsigned int для представления размеров; с другой стороны, имеет смысл использовать unsigned long или unsigned long long. (size_t вряд ли будет либо unsigned char, либо unsigned short, но это разрешено).

Цель size_t - избавить программиста от необходимости беспокоиться о том, какой из предопределенных типов используется для представления размеров.

Код, который предполагает, что sizeof дает unsigned int, не будет переносимым. Код, который предполагает, что он дает size_t, скорее всего, будет переносимым.

Ответ 3

size_t имеет специальное ограничение.

Цитата из http://www.cplusplus.com/reference/cstring/size_t/:

Псевдоним одного из фундаментальных целочисленных типов без знака.

Это тип, который может представлять размер любого объекта в байтах: size_t - это тип, возвращаемый оператором sizeof, и широко используется в стандартной библиотеке для представления размеров и подсчетов.

Он не взаимозаменяем с unsigned int, потому что размер int задается моделью данных. Например, LLP64 использует 32-разрядный int, а ILP64 использует 64-разрядный int.

Ответ 4

size_t используется для хранения размеров объектов данных и гарантированно может содержать размер любого объекта данных, который может создать конкретная реализация C. Этот тип данных может быть меньше (в количестве бит), больше или точно такой же, как без знака int.

Ответ 5

size_t type - это базовый беззнаковый целочисленный тип Язык C/С++. Это тип результата возвращенный оператором sizeof. Размер шрифта выбрано так, чтобы он мог хранить максимальный размер теоретически возможного массива любого типа. На 32-разрядная система size_t будет принимать 32 бита, на 64- бит один бит 64 бит. Другими словами, переменная size_t может безопасно хранить указатель. Исключение составляют указатели на функции класса, но это является частным случаем. Хотя size_t может хранить указатель, лучше использовать другую неподписанную целочисленный тип uintptr_t для этой цели (его название отражает его возможности). Типы size_t и uintptr_t - синонимы. size_t - это обычно используется для счетчиков циклов, индексации массива и адресную арифметику. Максимально возможное значение типа size_t постоянный SIZE_MAX.

Ответ 6

Помимо других ответов он также документирует код и говорит людям, что вы говорите о размере объектов в памяти

Ответ 7

Проще говоря, size_t зависит от платформы и зависит от реализации, тогда как unsigned int зависит только от платформы.