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

时间:2009-11-02 15:53:18

标签: c++ stl

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

4 个答案:

答案 0 :(得分:56)

std::basic_string是一个用于从字符类型中创建字符串的类模板,std::stringtypedef,用于char的该类模板的特化。是的,它们都是必需的(或者至少是标准要求的)。

答案 1 :(得分:31)

std::stringstd::basic_string<T>的实例化:

typedef std::basic_string<char> string

std::basic_string必须为所有类型的字符串(例如wstring)提供类似的接口。

答案 2 :(得分:15)

std::stringstd::basic_string模板的实例化,其类型为char。你需要两者,以便你可以在char之外创建一些字符串,例如一个宽字符串的std::basic_string<wchar_t>。或者,如果您想要一个包含32位元素的字符串std::basic_string<unsigned int>

答案 3 :(得分:0)

除了其他所有人回答的内容外,仅增加一小部分。由于std::stringbasic_string的特化形式,因此它也默认设置了除char类型以外的其他一些参数。basic_string可以具有自定义char类型(例如basic_string可以具有wide_chars),而定制char_trait(例如basic_string可以具有宽字符,但支持普通字符的所有操作)和自定义分配器(basic_string可以附带一些额外的信息,用于自定义调试器或静态内存管理)。

有用性

std::string会将所有这些参数默认设置为合理的值,因为在大多数情况下,您只需要一个std::string就可以了。另一方面,只要您需要更多自定义内容,就可以使用std::basic_string。所以两者都有不同的目的