C++ std::string是否低于QString?

C++ std::string是否低于QString?,c++,qt,stdstring,qstring,C++,Qt,Stdstring,Qstring,我的一位同事声称,std::string的实现,尤其是内存管理不如Qt库中的QString。 STD::String 这也可以引用内存管理方面的< < /P> < p>, qString 使用“复制写”,这在C++标准库中是明确禁止的。但这是有原因的。“写时拷贝”习惯用法在多线程环境中性能较差,因为它需要同步。更详细地讨论这些问题 另一方面,std::string的实现通常使用小字符串优化(SSO)来避免小字符串的任何动态内存分配。这是字符串的最新技术。通过内存管理,您必须决定什么更适合您的应用

我的一位同事声称,
std::string
的实现,尤其是内存管理不如Qt库中的
QString
。<代码> STD::String 这也可以引用内存管理方面的< < /P> < p>,<代码> qString 使用“复制写”,这在C++标准库中是明确禁止的。但这是有原因的。“写时拷贝”习惯用法在多线程环境中性能较差,因为它需要同步。更详细地讨论这些问题


另一方面,
std::string
的实现通常使用小字符串优化(SSO)来避免小字符串的任何动态内存分配。这是字符串的最新技术。

通过内存管理,您必须决定什么更适合您的应用程序。但是与std::string相比,QString的一个明显优势是unicode支持。QString在内部存储一个UTF-16编码的字符串,而std::string是不可知编码的。当您必须处理用户提供的多字节编码字符串时,这通常会使使用QString而不是std::string变得更加简单。

您的好友可能错了
QString
是UTF16,每个字符使用2个字节
std::string
是每个字符一个字节,通常用于utf8;虽然它不是自动utf8。它的记忆效率更高。就我所知,QString对于大多数函数来说是可重入的,并且不像在C++11中那样使用“移动”。有(可能不再有)std:string实现像QString一样使用写时复制。这样的语句是没有意义的。虽然
QString
是Qt的一部分,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兼容的实现,问题就有意义了。<代码>使用“复制写”,现在明确禁止。禁止写入“<代码> STD::String < /C>”。