sizeof(char)
всегда 1 байт. A byte
который мы считаем 8-bits need not be the case
. Существуют архитектуры, где BYTE - 32-битные, 24-битные и так далее. Код sizeof
, примененный к любому другому типу, состоит из sizeof(char)
, который равен by definition 1
.
Следующее важное замечание состоит в том, что C++ имеет три типа символов: plain char, signed char and unsigned char
. A plain char
либо signed
, либо unsigned
. Поэтому неправильно предположить, что char может иметь только значения от 0 до 255. Это справедливо только в том случае, когда char имеет 8 бит, а plain char
- unsigned
.
Сказав, что при условии, что «строка» равна 'std::namespace'
, sizeof(string) == 4
означает, что размер класса 'std::string'
составляет 4 байта. Он занимает в 4 раза больше байтов, которые 'char'
на этой машине занимает. Note that signed T, unsigned T always have the same size
. Это не означает, что фактический буфер символов (который называется строкой в общем выражении) составляет всего 4 байта. Внутри класса 'std::string'
существует нестационарный указатель на элемент, который динамически выделяется для хранения входного буфера. Это может иметь столько элементов, сколько позволяет система (C++ не ограничивает эту длину). Но так как класс 'std::string'
содержит только указатель на этот потенциально опасный буфер длины, sizeof (std :: string) всегда остается таким же, как указатель размера по данной архитектуре, который на вашей системе равен 4.
Где «строка» из? Запуск кода примера с помощью компилятора приведет к ошибке компиляции, поскольку некоторые из них будут неопределенными. (Я не могу себе представить, какой размер какой-либо, но наиболее наивный из «строковых» реализаций составляет всего 4.) –
@ dash-tom-bang только что отредактирован, чтобы включить мои файлы заголовков –
sizeof вычисляет размер типа данных, что полезно, если вы выполняете динамическое распределение. Я считаю, что string.length или размер - это то, что вы хотите. – 2010-09-02 17:02:53