簡體   English   中英

C ++中的標准庫實現有什么區別?

[英]What is the difference between standard library implementations in C++?

正如我們德國人所說的那樣,我可能“走在木路上”。 (諺語走錯路)

C ++定義了一個標准庫,這個標准經常在C ++ 98,C ++ 11,C + 17中更新(如果我錯了,請糾正我)。 我假設每個編譯器或操作系統都定義了自己的標准庫實現。

因此除了明顯的操作系統特定部分之外,標准庫的這些實現之間有什么不同(如果有的話)?

是否存在針對同一操作系統的實施的“變體”? 如果是這樣,我什么時候才想打擾使用哪種實現?

基本上每個容器的任何定義都是特定於實現的。 標准僅規定了聲明和預期的行為,副作用和條件。

§21.4.2中的示例:

 basic_string(const basic_string& str, size_type pos, size_type n = npos, const Allocator& a = Allocator()); 

需要pos <= str.size()

拋出out_of_range如果pos > str.size()

E ff ects :構造一個basic_string類的對象,並將初始字符串值的有效長度rlen確定為nstr.size() - pos較小的一個,如表65所示。

正如您所看到的,標准還說明 std::basic_string的構造函數,它沒有說明應該如何實現它。 它還定義了應該使用的簽名。 實際的實現因編譯器供應商而異 - gccclang有不同的實現,盡管它們是針對同一平台的,但構造函數也做同樣的事情。

你不需要擔心實現(從技術上來說,你做了 - 一些實現並沒有實現所有的東西 ,但這很少見),因為它們都應該應該 )完成標准中記錄的所有內容。

嗯, 標准這個詞確實意味着某種意義,不是嗎。

關鍵是:如果事情是標准的 ,那么每個實現都需要反映該標准。

換句話說:不要擔心標准,而是擔心那些沒有明確規定的事情,比如這里

此外,這是一個非常廣泛的話題。 我想你應該范圍縮小到更具體的問題/地區。

編輯 - 各種組創建自己的實現的原因:

  1. 與Java相比,例如,沒有“黃金標准”實現
  2. 編譯器構建者可能希望將庫微調到他們的產品(可能只是關於合法/許可主題)

暫無
暫無

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

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