Когда я должен использовать std :: size_t? - PullRequest
175 голосов
/ 23 декабря 2009

Мне просто интересно, стоит ли использовать std::size_t для циклов и прочего вместо int? Например:

#include <cstdint>

int main()
{
    for (std::size_t i = 0; i < 10; ++i) {
        // std::size_t OK here? Or should I use, say, unsigned int instead?
    }
}

В целом, как лучше всего применять std::size_t?

Ответы [ 13 ]

0 голосов
/ 23 декабря 2009

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

Некоторые функции возвращают size_t, и ваш компилятор предупредит вас, если вы попытаетесь сделать сравнение.

Избегайте этого, используя соответствующий тип данных со знаком / без знака или просто приведение типа для быстрого взлома.

0 голосов
/ 23 декабря 2009

size_t - это тип без знака, который может содержать максимальное целочисленное значение для вашей архитектуры, поэтому он защищен от целочисленных переполнений из-за знака (со знаком int 0x7FFFFFFF, увеличенного на 1, вы получите -1) или короткого размера (без знака short int 0xFFFF, увеличенное на 1, даст вам 0).

В основном используется для индексации массивов / циклов / адресной арифметики и так далее. Такие функции, как memset() и аналогичные, принимают только size_t, поскольку теоретически у вас может быть блок памяти размером 2^32-1 (на 32-битной платформе).

Для таких простых циклов не беспокойтесь и используйте только int.

0 голосов
/ 23 декабря 2009

size_t без знака int. поэтому, когда вы хотите unsigned int, вы можете использовать его.

Я использую его, когда хочу указать размер массива, счетчик и т. Д ...

void * operator new (size_t size); is a good use of it.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...