进来前就在想怕又是个 allocator 拎不清楚的,结果对比一个直接把 allocator 写脸上了……药店碧莲行么?
且不提 COW 的 std::basic_string ( C++11 已经寄了……那年头会折腾的都知道 vstring 和 rope 罢)同样的操作可能反过来吊打,你依赖 SIMD 就已经是可移植性上投降了。
std::string (还不是 std::basic_string )原则上不可能被干掉的最大槽点是污染 stdexcept 外加 ABI (但除了 Itanium 的 mangling 开洞之类的琐碎问题外,根本上这是用户对 ABI 假设普遍自己作死,不是 string 的问题),看不出这个的还真没资格写玩具碰瓷。
@
pocarisweat string 本来就是纯数学概念,虽然定义依赖 alphabet 却没所谓字符的意思,你还是先叫 C++的 vector 滚粗吧。
本来叫 vector 的东西 C++的叫 array ,本来叫 string 的东西 C++叫 vector (还硬塞了个 valarray ),然后扯了坨 char_traits ,就这笑话了。
虽然始作俑者应该是 C 硬把 B 的 vector 叫 array ,然后本来叫 array 的东西( C 表达不了) C++里叫[unordered_]map (严格来说是实现了 operator[]的 concept ,vector/basic_string 也算),本来叫 map 的东西叫 transform……乱成一锅粥。
ALGOL 厨二数学学渣祸害了不知道多少人。
@
nullptr 比如屑 LLVM 。还不只是 std::string 。
开个_GLIBCXX_DEBUG 不重新编译都能炸了。