advantage of QString over std::string

advantage of QString over std::string

本文关键字:string std over of QString advantage      更新时间:2023-10-16

QString 与 std::string 相比有什么优势?一个普通的std::string可以存储Unicode字符吗?我正在尝试编写一个可以打开各种歌曲文件的程序。这些文件的名称可以采用不同的语言。我听说在这种情况下使用普通字符串将无法正常工作。我想使应用程序独立于QT,并在Android中重用代码。你有什么建议.

QString允许您使用Unicode,具有更多有用的方法,并且可以很好地与Qt集成。正如cbamber85所指出的那样,它还具有更好的性能。

std::string只是存储你提供给它的字节,它对编码一无所知。它每个字符使用一个字节,但对于世界上所有语言来说还不够。存储文本的最佳方式可能是 UTF-8 编码,其中字符可以占用不同数量的字节,std::string无法正确处理!例如,这意味着length方法将返回字节数,而不是字符数。而这只是冰山一角...

如果你使用Qt框架来编写软件,那么你最好使用QString。原因很简单,几乎所有处理字符串的Qt函数都会接受QString。如果你使用 std::string,你可能会遇到你必须从一个到另一个打字的情况。如果你的软件根本没有使用Qt,你应该考虑使用std::string。这将使您的代码更具可移植性,并且不依赖于用户必须安装才能使用您的软件的额外框架。

我不熟悉QString,但std::string的最大优势是标准的。 关于Unicode,没有问题。将 UTF-8 存储在std::string中;取决于你在做什么,但是,最好使用std::wstring(通常将存储 UTF-16 或 UTF-32)。

对于Unicode的复杂操作,我建议ICU。 但对于很多应用程序,只需存储 UTF-8 就足够了。

从技术上讲,有一个标准的字符串类来存储任何类型的字符:std::basic_stringstd::stringstd::wstring只不过是charwchar std::basic_string专业化。还有针对 UTF-16 和 UTF-32 存储的专用std::u16stringstd::u32string

无论如何,如果你必须使用Qt,QString可能永远是比任何标准库字符串更好的选择,因为整个Qt框架都是为了使用它而设计的。