談結構體中std::string所佔的空間
阿新 • • 發佈:2019-01-10
#include <string>
#include <iostream>
struct test
{
int iID;
int iType;
std::string strName;
int iLevel;
test()
{
iID = 2;
iType = 2;
iLevel = 2;
strName = "Hello, world";
}
};
void Output(test& stTest)
{
char * pID = (char*)(&stTest);
cout << (int)(*pID) << endl;
cout << (int)(*(pID+sizeof(int))) << endl;
std::string *pName = (std::string *)(pID+sizeof(int) + sizeof(int));
cout << *pName << endl;
*pName = "hello";
cout << (int)(*(pID+sizeof(int) + sizeof(int)+sizeof(std::string))) << endl;
}
int main()
{
test stTest;
cout << sizeof(stTest) << endl;
Output(stTest);
Output(stTest);
}
結果如下:
40
2
2
Hello, world
2
2
2
hello
2
通過實驗標明,string在結構體中只佔用 sizeof(std::string)個位元組,不會因為其中的內容長短而有所變化,
可見其中的內容是另一塊儲存區,本地只儲存一個地址作為索引。