2013-06-11 3 views
1

Я получаю много критики за использование uint вместо size_t, но каждый раз, когда я проверяю инструментальную цепочку, я работаю с получателем size_t определяется как uint.Когда/где/почему size_t не является uint?

Есть ли какие-либо реализации компилятора, где size_t на самом деле не uint? В чем причина этой критики?

+1

Что такое «uint»? Предполагая, что вы имеете в виду 'unsigned int': http://coliru.stacked-crooked.com/view?id=b36d2ed363b5e1661e4a1a57d3a0e554-76238ab73c2fc168e6d731d9f34df389 –

+0

Вы никогда не знаете, из чего состоит будущее. 'size_t' является стандартным, элегантным и скупым. Лучше его использовать :) –

+0

size_t сделать ваш код прочным для каждой платформы платформы определит свой собственный size_t. –

ответ

6

size_t «размер, соответствующий максимально возможному диапазону адресов, который вы можете использовать в машине» (или несколько слов примерно для этого эффекта).

В частности, size_t будет 64 бит на 64-разрядной машине и 32 бит в 32-разрядной системе.

Я предполагаю, что uint не хватает unsigned int, что в значительной степени универсально 32 бита (в наши дни некоторые старые системы используют 16-битные целые числа). Таким образом, в 64-битной системе unsigned int будет еще 32 бита, хотя распределения памяти, строки и т. Д. Могут быть больше 32 бит, что может вызвать проблемы, если вы пытаетесь использовать uint для размера.

+0

IIRC также должен быть неподписанным –

+0

Тип для size_t не может быть неподписанным, но гарантированно будет «достаточно большим для распределения памяти в системе». Поэтому он никогда не будет переполняться (если вы не используете его «плохо»). –

+0

http://stackoverflow.com/questions/1089176/is-size-t-always-unsigned –

Смежные вопросы