淺談C++中的string 類型占幾個字節(jié)
在C語言中我們操作字符串肯定用到的是指針或者數(shù)組,這樣相對來說對字符串的處理還是比較麻煩的,好在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<<" 個字節(jié)"<<endl;
cout<<"str_test2占 "<<value2<<" 個字節(jié)"<<endl;
cout<<"string占 "<<value3<<" 個字節(jié)"<<endl;
system("pause");
return 0;
}
首先,我用G++編譯運行,得到的結(jié)果如下圖所示:
這說明string占4個字節(jié)。
之后,我用VS2012編譯運行,得到的結(jié)果如下圖所示:
奇怪,這里string竟然占28個字節(jié)。
這里,我們注意觀察,還會發(fā)現(xiàn)一個問題,不管有沒有對string類型的變量賦值,或者是賦什么值,得到的結(jié)果是一樣的。
下面,來解釋上述問題:
string的實現(xiàn)在各庫中可能有所不同,但是在同一庫中相同一點是,無論你的string里放多長的字符串,它的sizeof()都是固定的,字符串所占的空間是從堆中動態(tài)分配的,與sizeof()無關(guān)。 sizeof(string)=4可能是最典型的實現(xiàn)之一,不過也有sizeof()為12、32字節(jié)的庫實現(xiàn)。通常,我們所用到的 string 類型一般都會是這樣實現(xiàn):
class{
char *_Ptr; //指向字符串的指針
int _Len; //字符串的長度
........};
所以,我們一般接觸到的string類型所占字節(jié)數(shù)為 8+。
- C++中string轉(zhuǎn)換為char*類型返回后亂碼問題解決
- 自己模擬寫C++中的String類型實例講解
- C++中將string類型轉(zhuǎn)化為int類型
- 關(guān)于C++ string和c類型字符數(shù)組的對比
- C++利用stringstream進行數(shù)據(jù)類型轉(zhuǎn)換實例
- 利用C++實現(xiàn)從std::string類型到bool型的轉(zhuǎn)換
- C++如何通過ostringstream實現(xiàn)任意類型轉(zhuǎn)string
- 用標(biāo)準(zhǔn)c++實現(xiàn)string與各種類型之間的轉(zhuǎn)換
- C++中的string類型
相關(guān)文章
C語言數(shù)據(jù)結(jié)構(gòu)中樹與森林專項詳解
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)中樹與森林,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-11-11C++獲取多瀏覽器上網(wǎng)歷史記錄示例代碼(支持獲取IE/Chrome/FireFox)
這篇文章主要介紹了C++獲取多瀏覽器上網(wǎng)歷史記錄示例代碼,支持獲取IE, Chrome,FireFox等瀏覽器2013-11-11基于C語言實現(xiàn)學(xué)生選課系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了基于C語言實現(xiàn)學(xué)生選課系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-02-02