簡體   English   中英

使用String的任何缺點(C ++)

[英]Any Disadvantage to using String (C++)

我實際上在谷歌檢查了這一點,但我通常發現相反。 C ++中是否存在使用字符串庫字符串而不是C字符串或某種字符數組的任何缺點? 除了可能有點慢?

隨意給我一個傻瓜,但是我已經搜索過並且找不到任何東西(但是我確定有人問過)

假設std::string的供應商實現能夠勝任,那么確實沒有明顯的劣勢。 std::string類可能比打開編譯器優化的普通C字符串慢。

即使你發現自己處於需要 C字符串的情況下(比如說,你需要使用帶有const char*的API),你總是有std::string::c_str()

您可能遇到的一個可能的缺點是供應商實現以非線程安全的方式實現COW語義。 (參見多線程程序中的std :: string

但是,這在C ++ 0x中是一個非問題,即使在C ++ 03中,它確實是一個有問題的供應商實現的例子,而不是std::string本質上的任何錯誤。

另一個可能的缺點是,對於C ++ 03標准中的措辭是否需要使用std::string實現來使用連續的內存緩沖區存在爭議。 這使得您是否可以執行諸如直接從文件讀取到std::string對象之類的操作有些疑問。 然而,很容易認為,C ++ 03標准 ,其實隱含需要一個連續的緩沖區,反正它主要是一個學術問題,因為在實踐中1)的大部分(或全部)實現std::string其實做提供一個連續的緩沖區,2)問題對於C ++ 0x來說沒有實際意義,它明確需要一個連續的緩沖區。

我能想到的唯一可能的情況是你需要處理非常大的字符串(比如說,一些兆/千兆字節)。 在這種情況下,如果選擇了STL字符串類,則需要執行一些技巧以避免復制並實現新的放置。 對於像這樣的操作,char數組將非常簡單。

編輯

對不起,我完全誤解了你的問題。 至於缺點,我相信string類的一些實現使用引用計數,當涉及多線程應用程序時,這會導致意外的性能特征。

恕我直言答案取決於你在做什么。 如果您依賴使用C字符串的外部庫,請務必使用C字符串。

或者......也許你有一個你已經使用多年的完整C字符串庫...

否則我會使用stdlib字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM