У вас неправильная модель sizeof
, поэтому позвольте мне попытаться сделать это правильно.
Для любого данного объекта x
типа T
выражение sizeof(x)
являетсяконстанта времени компиляции.C ++ никогда не будет проверять объект x
во время выполнения.Компилятор знает, что x
имеет тип T
, поэтому вы можете представить, что он беззвучно преобразует sizeof(x)
в sizeof(T)
, если хотите.
#include <string>
int main()
{
std::string a = "hello";
std::string b = "Stack Overflow is for professional and enthusiast programmers, people who write code because they love it.";
std::cout << sizeof(a) << std::endl; // this prints 4 on my system
std::cout << sizeof(b) << std::endl; // this also prints 4 on my system
}
Все объекты C ++ одного типа принимаютдо точного объема памяти.Конечно, поскольку строки имеют очень разную длину, они будут внутренне хранить указатель на выделенный в куче блок памяти.Но это не касается sizeof
.Это невозможно, потому что, как я уже сказал, sizeof
работает во время компиляции.