缺少std :: string功能

Kor*_*icz 1 c++ string qstring std

任何人都知道为什么C++标准库' std::string类(或更一般地说是std::basic_string类模板)缺少普通的字符串功能,如大写,子串替换和修剪等,与Qt的QString类或Python字符串相比?

rub*_*nvb 5

我要去刺这个......

模板std::basic_string最初编写并列入STL,它代表了标准库的"抽象"的部分,因为我们知道它(容器,迭代算法,分配器,等等).这也包括在内std::string.

请注意STL中绝对没有编码,国际化或语言环境相关的功能.这不是设计目标.

现在我接受前几代人的事件:当C++标准化时,需要一个全面的标准库.STL非常适合这种情况,几乎是逐字逐句接管的.只是后来才是喜欢<iostream><locale>添加的东西.流和字符串之间的笨拙和非常不连贯的界面差异只能证明这种"让我们把它放在一起"的态度.

与许多std设施一样,组件之间的互操作性未得到优化.最重要的是,包含现有C功能(如toupper)的小型C++函数的简单性被用作不将其包含在标准库中的原因.

通过标准的下一版本(以及它所包含的库),向后兼容性阻止了添加任何有用和必要的更改(将语言环境注入std::string功能).

请注意,这个猜想根本没有解释为什么例如std::trim没有添加字符串和语言环境对象.它试图解释所涉及的背景过程.

既然已经说过了,我完全同意C++标准库的一般用处是笨重且不完整的.

更新:我被告知我的时间表是相反的:标准库(和iostream)在添加STL之前就已存在.上面的观点仍然有效:STL是复制粘贴的,几乎没有集成(简单的例子:直到最近才丢失std::basic_istream<T>::open(const std::basic_string<T>&),由于std::filesystem填充物将在下一次迭代中弃用).