[英]What are the advantages of using an STL clone?
對這些新手要點表示抱歉,但是我看到很多產品附帶不同的STL,並且想知道類似的東西什么時候有用。
我假設您是在談論STL的替代實現,而不是STL的替代。
出於某些原因,您可能會使用第三方的STL實現,而不是編譯器提供的默認實現。
一致性-您可能正在使用多個編譯器,並希望確保在每個平台上都具有相同的行為。
速度-一種實現可能比編譯器提供的實現效率更高。
完整性-您的編譯器默認庫可能未提供STL功能的完整補充。 (這可能僅適用於舊的編譯器,嵌入式系統的編譯器或C ++ 11功能)。
額外的功能-STL的某些實現提供了一些功能,例如改進了對無效迭代器的調試等,這些功能可能不在您的編譯器實現中。
顯然,並非所有這些方法都適用於所有編譯器。但是在某些情況下,第三方STL可能會有所幫助。
至於實現:您可以在此處找到列表
邁克爾(Michael)提供了一個很好的答案-僅需補充幾點:
“速度”不僅僅是線性的事情,您可以果斷地說STL實現X比STL Y快N%:在各種使用場景中,都有實現速度和內存使用之間的權衡選擇。 例如,“短字符串優化”可以允許將非常短的字符串直接存儲在字符串對象中,而不是存儲在堆內存中; 對於超出當前容量的大小容器的慷慨調整,實現可能會有稍微不同的選擇。
二進制互操作性很重要:如果您需要調用預先編譯的庫函數以接受STL X對象,則不能簡單地鏈接該庫並將其提供給STL Y等效項:整齊的名稱可能存在差異,鏈接時,對象的二進制布局可能會有所不同,即使沒有,並且您也強制執行了這樣的調用-客戶代碼在這些對象上執行的操作可能不是庫代碼期望或需要的一切(即無法維護)相同的不變式)。
線程安全是“額外功能”的一個值得注意的示例……例如,許多早期的STL在寫時復制字符串實現中均出現錯誤。
還有一點:某些STL實現允許您禁用異常的使用,可能使用自定義全局錯誤處理程序而不是C ++異常。 如今這已經不那么重要了,但是很長一段時間以來,許多系統出於各種原因禁用了異常,並且仍然有一些異常的系統不建議使用或完全不支持異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.