string :: insert中不同返回类型背后的原因是什么?

Sam*_*rsa 3 c++ stdstring

点击这里查看功能.如您所见,除了最后三个之外的所有内容都返回对字符串的引用.第三个最后一个重载返回一个迭代器,我猜测(我可能错了......)是因为参数中的迭代器在插入操作后可能变为无效.

最后两个功能怎么样?为什么他们没有返回对字符串的引用?这背后有什么理由吗?

sbi*_*sbi 8

这完全是关于历史的.std::string是一个在C++中甚至不应该存在的东西.不是因为C++不应该有一个字符串类(它在处理时必须有数万个std::string),而是因为C++标准化旨在编纂现有的实践,并且没有单一的字符串类只需要重命名到std::string为了有一个标准化的字符串类.所以它是"委员会设计",Stroustrup畏惧的东西,因此,C++标准化工作开始避免.
尽管如此,图书馆工作组从未找到他们喜欢的字符串类,因此他们开始创建自己的字符串类,违反了标准化过程的主要基本原则之一.

就好像这还不够,就在预期的C++标准化之前几个月,Stroustrup遇到了Stepanov和他的STL.从C++标准中尴尬地遗漏了一个容器和算法库,我猜想Stroustrup首先对Stepanov感兴趣.STL虽然看起来很奇怪我们所有人,他们到目前为止只接触过经典的OO图书馆,但却具有某种(如果是外来的)优雅与效率相结合的独特优势,在这一点上,我们都认为是根本不可组合.
所以Stroustrup游说将STL纳入标准,最终成功,从而推迟了整整一年的标准.(并不是我们今天感谢这个延迟!我的意思是,如果没有STL,C++会是什么?!)
在这个过程中,它被认为std::string是一个容器,所以它被追溯变成了一个完整的STL容器通过向其已经非常臃肿的接口添加STL容器接口.

这就是为什么std::string现在除了那些获取和返回迭代器之外还有函数接受和返回索引.