Std: : string 和 std: : basic_string 有什么区别? 为什么两者都需要?

std::stringstd::basic_string有什么区别? 为什么两者都需要?

38429 次浏览

std::basic_string是用字符类型生成字符串的类模板,std::stringtypedef,用于 char的类模板专门化。

std::string is an instantiation of std::basic_string<T>:

typedef std::basic_string<char> string

对于所有类型的字符串(例如 wstring) ,std::basic_string都必须具有类似的接口。

std::string是具有 char类型的 std::basic_string模板的实例化。两者都需要,这样就可以创建除 char之外的字符串,比如用于宽字符串的 std::basic_string<wchar_t>。或者,如果您想要一个具有32位元素的字串,std::basic_string<unsigned int>

只是其他人答案的一小部分。由于 std::stringbasic_string的专门化,因此它还默认了除 char 类型之外的其他一些参数。Basic _ string 可以有一个自定义的 char 类型(例如 basic _ string 可以有 wide _ chars) ,一个自定义 char _ trait (例如 basic _ string 可以有 wide char,但是支持普通 char 的所有操作) ,以及一个自定义分配器(basic _ string 可以有一些额外的信息,用于自定义调试器或静态内存管理)。

有用

std::string将所有这些参数默认设置为合理的值,因为在大多数情况下,您只需要一个 std::string,这就是它的有用性。另一方面,当你需要更多的定制你有 std::basic_string。所以两者都有不同的目的