有效STL的第15项说std :: string至少有6种不同的实现。但是如果我必须知道我正在使用哪种实现,我如何找出我正在使用的实现? std :: string的gcc没有显示源代码(它都在.so文件中),所以如何找到? 找不到任何here,所以如果将来我需要查找这些信息,我可以在哪里搜索?
答案 0 :(得分:6)
查看<string>
标题并观看版权?我要补充一点,据我所知,std::string
是basic_string<>
的typedef,因此是模板类。现在,根据我的记忆,只有Comeau C ++支持“导出”模板,因此所有其他编译器都需要在头文件中定义和实现模板类。你正在使用GCC,所以可能在<string>
标题中你会找到一大块字符串实现。 (我将补充说,制作模板“shim”/“proxy”是一个常见的技巧,它调用非模板化的类来最小化编译大小,因此并非所有实现都需要在头文件中,并且std::string
许多方法的具体情况可以在C“字符串”库之上定义(但可能不会因为std::string
认为null
是有效字符)