sizeof
возвращает размер выражения. Для вас это std::string
, а для вашей реализации std::string
- четыре. (Возможно, указатель на буфер, внутри.)
Но вы видите, что буфер указывается только строкой, он не влияет на размер самого std::string
. Для этого вы хотите message.size()
, который даст вам размер строки, на которую указывает указатель буфера.
При изменении содержимого string
изменяется указатель буфера, но сам указатель всегда имеет одинаковый размер.
Примите во внимание следующее:
struct foo
{
int bar;
};
На данный момент, sizeof(foo)
известен; это константа времени компиляции. Это размер int
вместе с дополнительными отступами , которые может добавить компилятор.
Вы можете позволить bar
принимать любое желаемое значение, и размер остается неизменным, поскольку значение bar
не имеет ничего общего с типом и размером самого bar
.