Является ли string :: size_type достаточно большим, чтобы вместить какую-либо строку? - PullRequest
1 голос
/ 03 апреля 2011

Я просмотрел некоторые темы о string::size_type здесь, и я понимаю по стандартам C ++, что этот size_type гарантирует достаточное распределение для всего использования строки.

Мне просто трудно в это поверить. Что если я помещу весь текст, скажем, C ++ Primer 4th edition в строку? Или, что еще хуже, что если я добавлю бесконечные символы в строку? Я просто не понимаю, как он справится с этим.

Ответы [ 2 ]

3 голосов
/ 03 апреля 2011

string::size_type гарантированно будет достаточно большим для всех строк , что текущая реализация поддерживает - не любая строка любого размера. Если ваша реализация поддерживает строки до, например, 8 ГБ, size_type может содержать цифры до 8 млрд.

2 голосов
/ 03 апреля 2011

Это не гарантирует достаточного выделения для использования всей строки . Скорее наоборот: он ограничивает максимальную длину std::string. По сути, это тип, который используется реализацией строки для хранения собственной длины. Это ограничение является немного искусственным: обычно size_type достаточно велико, чтобы удерживать смещение, равное адресному пространству процесса - что, конечно, не может быть достигнуто, поскольку вы никогда не можете выделить все свое адресное пространство одной строке .

(вы на самом деле можете поместить весь текст C ++ Primer в строку.)

...