std::string
和std::basic_string
之间有什么区别?为什么两者都需要?
答案 0 :(得分:56)
std::basic_string
是一个用于从字符类型中创建字符串的类模板,std::string
是typedef
,用于char
的该类模板的特化。是的,它们都是必需的(或者至少是标准要求的)。
答案 1 :(得分:31)
std::string
是std::basic_string<T>
的实例化:
typedef std::basic_string<char> string
std::basic_string
必须为所有类型的字符串(例如wstring
)提供类似的接口。
答案 2 :(得分:15)
std::string
是std::basic_string
模板的实例化,其类型为char
。你需要两者,以便你可以在char
之外创建一些字符串,例如一个宽字符串的std::basic_string<wchar_t>
。或者,如果您想要一个包含32位元素的字符串std::basic_string<unsigned int>
。
答案 3 :(得分:0)
除了其他所有人回答的内容外,仅增加一小部分。由于std::string
是basic_string
的特化形式,因此它也默认设置了除char类型以外的其他一些参数。basic_string可以具有自定义char类型(例如basic_string可以具有wide_chars),而定制char_trait(例如basic_string可以具有宽字符,但支持普通字符的所有操作)和自定义分配器(basic_string可以附带一些额外的信息,用于自定义调试器或静态内存管理)。
std::string
会将所有这些参数默认设置为合理的值,因为在大多数情况下,您只需要一个std::string
就可以了。另一方面,只要您需要更多自定义内容,就可以使用std::basic_string
。所以两者都有不同的目的