C++ 我如何知道哪个STL字符串实现I';我在用什么?

C++ 我如何知道哪个STL字符串实现I';我在用什么?,c++,string,stl,C++,String,Stl,有效STL的第15项指出std::string至少有6种不同的实现。但是如果我必须知道我使用的是哪种实现,那么我如何知道我使用的是哪种实现呢? gcc的std::string没有显示源代码(都在.so文件中),那么我如何找到呢? 找不到任何内容,因此如果将来我需要查找此类信息,我可以在哪里搜索?查看标题并查看版权?我要补充一点,据我所知,std::string是basic_string的类型定义,因此是一个模板类。现在,从我所记得的,只有CuMueC++支持“导出”模板,所以所有其他编译器都需要

有效STL的第15项指出std::string至少有6种不同的实现。但是如果我必须知道我使用的是哪种实现,那么我如何知道我使用的是哪种实现呢? gcc的std::string没有显示源代码(都在.so文件中),那么我如何找到呢?
找不到任何内容,因此如果将来我需要查找此类信息,我可以在哪里搜索?

查看
标题并查看版权?我要补充一点,据我所知,
std::string
basic_string
的类型定义,因此是一个模板类。现在,从我所记得的,只有CuMueC++支持“导出”模板,所以所有其他编译器都需要在头文件中定义和实现模板类。您使用的是GCC,因此在
标题中,您可能会找到一大块字符串实现。(我要补充的是,制作一个调用非模板类以最小化编译大小的模板“shim”/“proxy”是一个常见的技巧,因此并非所有的实现都真正需要在头文件中,而且对于
std::string
的特定情况,可以在C“string”库的顶部定义许多方法(但可能不会,因为
std::string
null
视为有效字符)

啊!找到了!它在basic_string.h.谢谢:)原因
basic_string
是一个模板,因此它不需要对它将处理的字符类型做出假设-C“string”不支持宽字符等,因此最多只能由专业人员用于
char
,但这只会使代码更加复杂,并可能导致不必要的越行调用。(另外,另一个技巧是使用特定的模板实例化为实现创建一个非模板包装器,这样模板头就不需要向每个客户机公开/由每个客户机解析)。这有什么关系?只要实现满足标准要求,就不应该如此。