2012-05-23 21 views
3

我正在阅读一本C++教程书籍,作者说大多数C++编译器都包含一个String类库,但即使它存在,也建议您创建自己的String类。不幸的是,作者没有说明原因。有人不同意/同意,为什么?C++:是否建议创建自己的String类?

我使用Xcode和提供的String类对我来说似乎很好,但是再次,我只使用它几个小时,所以我不知道这些限制。

在此先感谢。

+9

不要说你应该创建你自己的String类,标准的类将会很好。 –

+3

这本书多少岁? –

+0

“std :: string”不够好吗?让一个人享受乐趣总是很有趣,但我不认为这是有益的。 – chris

回答

6

听起来像你有一本旧书。

C++标准库包括std::string类,您应该使用该类,而不是发明自己的并修复在广泛使用的库中已经遇到并修复的错误。

因为你是一个初学者,是的,你应该在实施你自己的过程中摆动,因为它会教你很多。只是不要在任何'真实'的项目中使用它。

+0

实际上,STL没有包含std :: string。 std :: string在STL被添加到标准库时被砸碎了很多,以适应STL范例,但STL没有,也没有包含STL范例。 –

+0

@CrazyEddie:我一直认为他们是,但我不知道现实稍微复杂一些。我在这里找到了一个SO贴子:http://stackoverflow.com/questions/5972546/is-stdstring-part-of-the-stl –

+0

虽然它不完全是'std :: string',但一些分布STL确实包含了一个'bstring'(基本字符串)。我记得,亚历山大斯捷潘诺夫说,它只是想保留一些简单的例子,尽管简单。 –

2

建议创建自己的String类

我相信笔者建议创建自己的String类,如良好的编程工作,以发展自己的技能。

这将是荒谬的(至少可以这样说)暗示创建自己的String类实际生产代码或者非学术码

3

C++没有一个String类。但有一个std::string类涵盖了基本的字符串功能,并保证由标准存在。要使用它,您需要#include <string>

如果您发现自己需要比std::string中提供的更多功能,则可以随时添加对该字符串进行操作的免费函数。还有第三方字符串实现(MS的CString,RogueWave的RWCstring),但是我个人认为它们非常有用,如果你只是在做基本的东西。

1

标准库的std::string类在字符串类中缺少很多常用设施,包括分割字符串,与正则表达式匹配,转换为整数等等。我认为完全重写std::string类不是一个好主意(除非它基本上与您的需求不兼容),但将std::string课程分类以提供其中一些功能将会很好。

+0

只要确保不引入任何其他字段。否则,如果您尝试“删除”指向子类实例的std :: string指针,则会发生内存泄漏。 – someguy

+0

我没有downvote,但它值得。 –

+2

'std :: string'缺少这些功能,因为它们不属于字符串类的一部分。他们可以(也很容易)实现为免费功能。 –

0

您可能想要创建自己的字符串类有一些原因,例如您可能希望创建一个不可变的字符串类,其中的函数经过优化用于创建新的衍生字符串,而不是修改现有的字符串,因为它们有时可以更好地播放多线程代码。但是,如果你正在阅读一本初学者的书,那么这当然不是你需要做的事情,反正至少应该重新考虑三次。

正如人们所说,std :: string是99.9%的东西使用的东西。