C++字符串is the following的声明
template<
class CharT,
class Traits = std::char_traits<CharT>,
class Allocator = std::allocator<CharT>
> class basic_string;
CharT
是字符类型,可以是char
、wchar_t
、char16_t
和char32_t
;但毕竟basic_string
是一个模板,所以可以用其他CharT
和其他分配器实例化。虽然我可以在其他分配器的一些用例中思考,但我无法在其他数据类型的字符串的用例中思考,例如:
using string = std::basic_string<int>;
使用整数字符串,我们不能将其初始化为字符串(显而易见)或u32字符串(至少对我来说不是那么明显);但只要列表包含的类型可以转换为int
,我们就可以用initializer_list
初始化它
string err1("test"); // Error!
string err2(U"test"); // Error!
string err3{"test"}; // Error!
string err4{U"test"}; // Error!
string err5 = "test"; // Error!
string err6 = U"test"; // Error!
string success1({U't', U'e', U's', U't'});
string success2 = {U't', U'e', U's', U't'};
string success3({'t', 'e', 's', 't'});
string success4 = {'t', 'e', 's', 't'};
但是,即使我们设法初始化一个整数字符串,我们也不能以正常的方式使用它:
std::cout << success1; // Error! expected 116101115116
唯一期望与cout
一起使用的basic_string
是普通的,这是有意义的:毕竟,我们不能假设应该如何打印一个整数字符串或一个MyFancyClass
E字符串。
但不管怎样,basic_string
的奇怪实例的创建并不是被禁止的;一方面,由于缺乏禁止使用的功能,因此没有被禁止。概念),而在不限制底层类型的情况下编写basic_string
比以相反的方式(没有概念)更容易,这让我想知道:
std::basic_string<T>
不是字符类型的情况下,T
有什么用处吗?至于任何用途,我正在考虑的事情只能通过T
字符串来实现,而不能通过T
的向量来完成(否则它将更难做到),换句话说:
T
是更好的选择的情况?https://stackoverflow.com/questions/35775405
复制相似问题