【发布时间】:2015-02-16 22:03:32
【问题描述】:
我的一位同事声称std::string 的实现,尤其是内存管理不如Qt 库中的QString。 std::string 的哪些方面也可以参考?
【问题讨论】:
-
你的朋友错了。
QString是 UTF16,每个字符使用 2 个字节。std::string是每个字符一个字节,通常用于 utf8;虽然它不是自动 utf8。它在记忆方面更有效。 QString 对于大多数函数是可重入的,据我所知,它不像 C++11 中那样使用“移动”。 -
std:string 不是一个单一的实现。有(可能不再有)std:string 实现使用写时复制,如 QString。
-
这样的说法毫无意义。
QString是 Qt(具体库)的一部分,std::string是库的特定规范的一部分。您只能评估该规范的特定实现。QString的公共接口,在内存管理方面,与std::string的区别不大;所以,std::string可以至少和QString一样被实现。 -
@adrianm
std::string自 C++11 起不再允许使用 COW,因此此类实现正在消亡。 -
@Martin,实际上,正如其他人所说(我在写评论时忘记了),
QString使用写时复制方法(COW)。 C++98 允许 COW,并且有使用它的实现。 C++11 不再允许 COW,因此,如果您只考虑符合 C++11 的实现,那么这个问题就很有意义。