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. Это верно только в том случае, если символ 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) всегда остается таким же, как sizeof указателя в данной архитектуре, которая в вашей системе равна 4.