回覆列表
-
1 # 群熊逐鹿
-
2 # 楊文垚
char[]是基礎型別,就是不可再細分的原子型別,而string是可再細分為原子型別的擴充套件型別。為了保持記憶體的利用率和高效率,所以底層都是使用最基本的原子型別。而且C語言本身就沒有物件設計概念,是一門函式式需要。C++則是一門面向物件程式語言,在資料型別上增加了物件型別這麼一個概念。而string是一個物件型別,是C++對C語言的一種擴充套件和補充。
另外再給你糾正一下,C和C++嚴格意義上講是兩門獨立的語言,C++可以相容C,但C不相容C++。也就是說C++是建立在C上面,所以你說的底層應該是指C而不是C++,所以自然只有char[]而沒有string了。
-
3 # cpp攻城獅
建議你先確定底層實現檔案的字尾名是.c還是.hpp還是.cpp還是.cc如果是.c那說明這是C語言,沒有string型別,否則std::string只是對字串包裝了一層,封裝了些通用的方法,效率上char[]略高。
-
4 # 言真mars
其實某種程度上是為了相容。C++很多程式碼都是從C繼承下來了。為了保持相容性以及一致性,就用了char[],同時由於使用C的開發人員通常對記憶體、系統暫存器有準確的掌握和認知,使用char[],某種程度上也C程式設計師的一種掌控性在起作用。String畢竟是類,對於記憶體的控制,更多的是一種黑盒,對於頂級的C程式設計師來說,這裡面反而多了一些不可控的因素。
由於多年的積累,char[]作為記憶體使用的一種標準方法,對於其操作已經形成了一套比較安全的策略,在某種程度上也保證了其使用的可控性和安全性。
C語言裡沒有string型別,只能用char[],這個問題針對C++來說比較合適。
這個問題沒有前提,我只能假設幾種情況分享一下我的看法:
首先,string屬於C++ STL範疇,STL存在多個版本,如果底層程式碼使用STL,可能造成ABI不相容(C++自身的ABI相容問題也存在,這裡先不槓),這本身就違背了底層庫的初衷。
其次,char[]和string本來也不是同一個概念,一個是位元組流,一個是字串,從通用性方面考慮,肯定要選擇位元組流,因為位元組流也可以處理字串。
最後,在移植與介面方面,完全向C語言靠攏會少很多麻煩,因為幾乎所有的高階語言都會預留C語言介面,你整個string做引數,怎麼跟人家互動?
個人看法,僅供參考。