最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入探究C++ string的內(nèi)部究竟是什么樣的

 更新時(shí)間:2021年01月05日 09:33:51   作者:RioTian  
這篇文章主要給大家介紹了關(guān)于C++ string的內(nèi)部究竟是什么樣的,文中通過示例代碼的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在C語言中,有兩種方式表示字符串:

  • 一種是用字符數(shù)組來容納字符串,例如char str[10] = "abc",這樣的字符串是可讀寫的;
  • 一種是使用字符串常量,例如char *str = "abc",這樣的字符串只能讀,不能寫。

兩種形式總是以\0作為結(jié)束標(biāo)志。

C++ string 與它們?cè)贑語言中的前身截然不同。首先,也是最重要的不同點(diǎn),C++ string 隱藏了它所包含的字符序列的物理表示。程序設(shè)計(jì)人員不必關(guān)心數(shù)組的維數(shù)或\0方面的問題。

string 在內(nèi)部封裝了與內(nèi)存和容量有關(guān)的信息。具體地說,C++ string 對(duì)象知道自己在內(nèi)存中的開始位置、包含的字符序列以及字符序列長(zhǎng)度;當(dāng)內(nèi)存空間不足時(shí),string 還會(huì)自動(dòng)調(diào)整,讓內(nèi)存空間增長(zhǎng)到足以容納下所有字符序列的大小。

C++ string 的這種做法,極大地減少了C語言編程中三種最常見且最具破壞性的錯(cuò)誤:

  • 數(shù)組越界;
  • 通過未被初始化或者被賦以錯(cuò)誤值的指針來訪問數(shù)組元紊;
  • 釋放了數(shù)組所占內(nèi)存,但是仍然保留了“懸空”指針。

C++ 標(biāo)準(zhǔn)沒有定義 string 類的內(nèi)存布局,各個(gè)編譯器廠商可以提供不同的實(shí)現(xiàn),但必須保證 string 的行為一致。采用這種做法是為了獲得足夠的靈活性。

特別是,C++ 標(biāo)準(zhǔn)沒有定義在哪種確切的情況下應(yīng)該為 string 對(duì)象分配內(nèi)存空間來存儲(chǔ)字符序列。string 內(nèi)存分配規(guī)則明確規(guī)定:允許但不要求以引用計(jì)數(shù)(reference counting)的方式實(shí)現(xiàn)。但無論是否采用引用計(jì)數(shù),其語義都必須一致。

C++ 的這種做法和C語言不同,在C語言中,每個(gè)字符型數(shù)組都占據(jù)各自的物理存儲(chǔ)區(qū)。在 C++ 中,獨(dú)立的幾個(gè) string 對(duì)象可以占據(jù)也可以不占據(jù)各自特定的物理存儲(chǔ)區(qū),但是,如果采用引用計(jì)數(shù)避免了保存同一數(shù)據(jù)的拷貝副本,那么各個(gè)獨(dú)立的對(duì)象(在處理上)必須看起來并表現(xiàn)得就像獨(dú)占地?fù)碛懈髯缘拇鎯?chǔ)區(qū)一樣。例如:

// #include<bits/stdc++.h>
#include <iostream>
#include <string>
using namespace std;
 
int main() {
 string s1("12345");
 string s2 = s1;
 cout << (s1 == s2) << endl;
 s1[0] = '6';
 cout << "s1 = " << s1 << endl; // 62345
 cout << "s2 = " << s2 << endl; // 12345
 cout << (s1 == s2) << endl;
 
 return 0;
}

在 GCC 下的運(yùn)行結(jié)果:

1
s1 = 62345
s2 = 12345
0

只有當(dāng)字符串被修改的時(shí)候才創(chuàng)建各自的拷貝,這種實(shí)現(xiàn)方式稱為寫時(shí)復(fù)制(copy-on-write)策略。當(dāng)字符串只是作為值參數(shù)(value parameter)或在其他只讀情形下使用,這種方法能夠節(jié)省時(shí)間和空間。

不論一個(gè)庫(kù)的實(shí)現(xiàn)是不是采用引用計(jì)數(shù),它對(duì) string 類的使用者來說都應(yīng)該是透明的。遺憾的是,情況并不總是這樣。在多線程程序中,幾乎不可能安全地使用引用計(jì)數(shù)來實(shí)現(xiàn)。

到此這篇關(guān)于C++ string的內(nèi)部究竟是什么樣的的文章就介紹到這了,更多相關(guān)C++ string內(nèi)部是什么內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言對(duì)冒泡排序進(jìn)行升級(jí)介紹

    C語言對(duì)冒泡排序進(jìn)行升級(jí)介紹

    大家好,本篇文章主要講的是C語言對(duì)冒泡排序進(jìn)行升級(jí)介紹,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • 使用kendynet構(gòu)建異步redis訪問服務(wù)

    使用kendynet構(gòu)建異步redis訪問服務(wù)

    這篇文章主要介紹了在kendynet上寫的一個(gè)簡(jiǎn)單的redis異步訪問接口,大家參考使用吧
    2014-01-01
  • C語言 main 函數(shù)詳情

    C語言 main 函數(shù)詳情

    這篇文章主要介紹C語言 main 函數(shù),文章將圍繞C語言 main 函數(shù)相關(guān)資料詳細(xì)展開,需要的朋友可以參考一下
    2021-10-10
  • C/C++?單元自動(dòng)化測(cè)試解決方案總結(jié)

    C/C++?單元自動(dòng)化測(cè)試解決方案總結(jié)

    這篇文章主要介紹了C/C++?單元自動(dòng)化測(cè)試解決方案總結(jié),通過利用GCC插件來實(shí)現(xiàn)提升C/C++開發(fā)者的單元效率工具解決方案,希望對(duì)大家在提升單元測(cè)試效率上有所啟發(fā)
    2022-06-06
  • C++關(guān)于Makefile的詳解含通用模板

    C++關(guān)于Makefile的詳解含通用模板

    今天小編就為大家分享一篇關(guān)于C++關(guān)于Makefile的詳解含通用模板,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • C語言實(shí)現(xiàn)SM4加解密方式

    C語言實(shí)現(xiàn)SM4加解密方式

    這篇文章主要介紹了C語言實(shí)現(xiàn)SM4加解密方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 利用C++實(shí)現(xiàn)計(jì)算機(jī)輔助教學(xué)系統(tǒng)

    利用C++實(shí)現(xiàn)計(jì)算機(jī)輔助教學(xué)系統(tǒng)

    我們都知道計(jì)算機(jī)在教育中起的作用越來越大。這篇文章主要為大家詳細(xì)介紹了如何利用C++編寫一個(gè)計(jì)算機(jī)輔助教學(xué)系統(tǒng),感興趣的可以了解一下
    2023-05-05
  • C語言三子棋游戲的簡(jiǎn)單設(shè)計(jì)

    C語言三子棋游戲的簡(jiǎn)單設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C語言三子棋游戲的簡(jiǎn)單設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C基礎(chǔ) mariadb處理的簡(jiǎn)單實(shí)例

    C基礎(chǔ) mariadb處理的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)硪黄狢基礎(chǔ) mariadb處理的簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • C++ const引用、臨時(shí)變量 引用參數(shù)詳解

    C++ const引用、臨時(shí)變量 引用參數(shù)詳解

    下面小編就為大家?guī)硪黄狢++ const引用、臨時(shí)變量 引用參數(shù)詳解。小編覺得挺不錯(cuò)的現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01

最新評(píng)論

峨眉山市| 栾川县| 蕲春县| 蓝山县| 襄汾县| 竹北市| 多伦县| 汉寿县| 吉木萨尔县| 观塘区| 治多县| 台南市| 屯昌县| 尚义县| 无棣县| 游戏| 通州区| 纳雍县| 郴州市| 柞水县| 靖安县| 吕梁市| 鄂伦春自治旗| 东明县| 葵青区| 山东| 开原市| 济阳县| 漳州市| 元阳县| 志丹县| 宁波市| 夏津县| 邹平县| 旬阳县| 秦安县| 镶黄旗| 康乐县| 鹤壁市| 如皋市| 昌江|