在C語言中我們操作字符串肯定用到的是指針或者數組,這樣相對來說對字符串的處理還是比較麻煩的,好在C++中提供了 string 類型的支持,讓我們在處理字符串時方便了許多。
首先,我寫了一段測試代碼,如下所示:
代碼如下:
#include <iostream>
using namespace std;
int main(void)
{
string str_test1;
string str_test2 = "Hello World";
int value1, value2, value3;
value1 = sizeof(str_test1);
value2 = sizeof(str_test2);
value3 = sizeof(string);
cout<<"str_test1占 "<<value1<<" 個字節"<<endl;
cout<<"str_test2占 "<<value2<<" 個字節"<<endl;
cout<<"string占 "<<value3<<" 個字節"<<endl;
system("pause");
return 0;
}
首先,我用G++編譯運行,得到的結果如下圖所示:
這說明string占4個字節。
之後,我用VS2012編譯運行,得到的結果如下圖所示:
奇怪,這裡string竟然占28個字節。
這裡,我們注意觀察,還會發現一個問題,不管有沒有對string類型的變量賦值,或者是賦什麼值,得到的結果是一樣的。
下面,來解釋上述問題:
string的實現在各庫中可能有所不同,但是在同一庫中相同一點是,無論你的string裡放多長的字符串,它的sizeof()都是固定的,字符串所占的空間是從堆中動態分配的,與sizeof()無關。 sizeof(string)=4可能是最典型的實現之一,不過也有sizeof()為12、32字節的庫實現。通常,我們所用到的 string 類型一般都會是這樣實現:
代碼如下:
class{
char *_Ptr; //指向字符串的指針
int _Len; //字符串的長度
........};
所以,我們一般接觸到的string類型所占字節數為 8+。