为什么会出现在每一个C ++平台不同的字符串类在那里?(Why is there a differe

2019-09-01 00:40发布

虽然我在C ++编程一样,我讨厌的想法:
std::basic_string vs QString vs wxString vs .............
未在standard string类满足这些框架的需求? 我的意思是错误的standard string类?

只是强调,这下面是一个重要的问题:
你学习“”串类中你要一起工作的每个框架的框架? 你会,而不是坚持标准字符串类试图通过无处不在适应呢?

谢谢...

Answer 1:

其原因多个字符串类别是C ++标准定稿相当晚(在1998); 然后,它花了一些时间,直到所有系统实际提供正确的C ++库。 到那时,所有的这些竞争串类,其中已写入。

此外,在某些情况下,人们希望从一个单一的基类,它的std :: string不会做继承。



Answer 2:

IMO,的std :: string是不是老得足以广泛(Qt和wxWidgets的比旧的STL,或者至少比广泛使用的稳定和工作的补充交易以上)。 此外,的std :: string是可悲的不是最好的string类有适合每一个人,和其他框架有其他的需求。

注意! 略低于不正确的段落,但保留做出的评论感觉。

例如,C ++ STL的十分资源约束,而Qt的string类提供很多好东西,一个committe是绝对不会同意的,尤其是一些希望它是嵌入式系统等容易实现的。



Answer 3:

一个与主要问题std::string是缺乏Unicode支持。 即使有std::wstring ,你只得到了Unicode代码点的容器,但仍必须实现支持Unicode的功能。

此外, QString例如是“隐式共享”。 这使得它非常容易通过在你的代码串,以高效的方式。 他们只是在写实际复制。



Answer 4:

一个合理的理由(对像“我不想学了标准库”不合理等原因)是一些图书馆希望保留控制权的二进制布局,以达到某些种类的互操作(比如跨版本的二进制兼容性) 。 这方面的一个例子是_bstr_t在VC ++库; 它是一个_bstr_t表示为BSTR(因为这是COM需要)COM而言重要的,所以建立在BSTR的一种包装是COM的开发价值。



Answer 5:

IIRC Bjarne的Stroustrup的故意选自C省略String类++因为他认为它是“通过仪式”。 所有谁学会了C ++那些预计自己写的。 当然,在C的开始++没有标准库,我记得在健康的美国国家研究院(从AT&T(这是对C预处理器)版本和NIH类从一个非常先锋集团其中也包括早期的集合类)。



Answer 6:

的std :: string是伟大的......哦,不同的是它没有一个“格式()”呼唤我,,它没有斯普利特()或加入()......其实,这不是”做T的很多东西,在那些“低人一等”的脚本语言的字符串的用户得到想当然...

如果C ++不得不添加到现有的类(比如Objective-C的或Ruby)的能力,那么你可能就不会看到这个...

此外,考虑到C ++一般以让您创建一个行为像真正的本地类型的对象做一个更好的工作(不是东西如Java)...



Answer 7:

一个C ++的租户是“你不付你不需要的东西。” 这意味着并不需要是一个尺寸适合所有的字符串类,每一个C ++程序员必须知道和(更重要的)必须使用。 也许你的项目需要线程安全的字符串。 你可以滚你自己的类。 而你总是要使用现有的std :: string的选项。

碰巧的是,在大多数情况下的std :: string是不够好。 但是,当它是不是,是不是你高兴你不会被锁定到它。 尝试推出自己的String类在Java中,看看需要多长时间,直到你拉你的头发。

关于你的第二点,如果你要对你已经添加到您的项目库打,为什么你的库添加到您的项目摆在首位? 使用wxWidgets的或QT决定的部分原因是,你必须接受你的项目(或至少是该项目的相当一部分)的串类的确认。 就像决定一个“C”库是指具有的char *缓冲区和尺寸参数上的所有功能搭建。

所以,是的,学交替串类。 如果您使用的是库(或想成为精通它),你不能决定忽略仅仅因为“它的另一个字符串类”库的一部分。 这是没有意义的。



文章来源: Why is there a different string class in every C++ platform out there?