2011-03-28 34 views
2

有效STL的第15項說至少有6個不同的std :: string實現。但是如果我必須知道我正在使用哪個實現,我如何找出我正在使用的實現? std :: gcc的字符串不顯示源代碼(全部在.so文件中),那麼如何找出? 找不到任何東西here,所以如果將來我需要查找這樣的信息,我可以在哪裏搜索?我如何知道我正在使用哪個STL字符串實現?

+2

爲什麼重要?只要實現符合標準的要求,它不應該。 – 2011-03-28 08:27:00

回答

6

看看<string>標題和觀看版權?我會補充一點,從我所知道的std::string是一個basic_string<>的typedef,所以模板類。現在,我記得,只有Comeau C++支持「導出」模板,因此所有其他編譯器都需要在頭文件中定義和實現模板類。您正在使用GCC,因此可能在<string>頭文件中您會發現一大串字符串實現。 (我會補充說,製作一個調用非模板類來最小化編譯大小的模板「shim」/「proxy」是一種常見的技巧,所以並不是所有的實現都需要在頭文件中,並且對於在C「字符串」庫的頂部可以定義許多方法的具體情況(但可能不會因爲std::string認爲null是有效字符)

+0

啊!找到了!它在basic_string.h中。謝謝:) – Nav 2011-03-28 07:20:30

+1

原因'basic_string'是一個模板,所以它不需要對字符類型做出假設句柄-C C「字符串」不支持寬字符等,所以最多隻能用於'char'的專業化,但是臨時否則只會使代碼更復雜,並可能導致不必要的外線呼叫。 (另外,另一個訣竅是使用特定的模板實例化來製作非模板化的包裝器,使得模板頭不需要被每個客戶端暴露/解析)。 – 2011-03-28 07:42:39

相關問題