QString优于std :: string的优点

Vih*_*rma 24 c++ string unicode qt qt-creator

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

Ole*_*pin 29

QString允许你使用Unicode,有更多有用的方法,并与Qt很好地集成.它也有更好的性能,如cbamber85 所述.

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

  • Vihaan,如果你试图避免Qt的话你为什么要使用它?如果你必须与Qt组件接口,那么使用QString可以让你的生活更轻松. (11认同)
  • 请注意,`QString`与std :: string具有完全相同的问题:它的大小也是UTF-16代码点的数量,而不是字符数. (9认同)
  • @Arafangion`std :: string`只是存储你给它们的字节,它对编码一无所知.(例如,这意味着`length`是字节数,而不是字符) (2认同)
  • @vy32:`std::wstring` 更糟。您不知道每个字符是 2 字节还是 4 字节,并且无论如何也不能保证它是 Unicode。至少对于 `std::string`,你知道它是每个字符 1 个字节,并且你不会总是使用 wstring *反正*(就像在 Windows 中,其中 `wchar_t` 是 2 字节)的每个代码点访问。 (2认同)

Jam*_*nze 8

我不熟悉QString,但最大的优点std::string 是它标准的.关于Unicode,存储UTF-8没有问题std::string; 但是,根据你正在做的事情,使用a std::wstring(通常会存储UTF-16或UTF-32)可能更好.

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


Pan*_*kaj 8

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

  • 使用框架不应成为让框架库渗透到整个代码中的理由.在ui边界转换是一个很小的代价,以防止供应商锁定. (5认同)
  • @daramarak你说得对,但Qt不仅仅是一个UI框架.它提供了所有类型的非UI东西,如网络,SQL,XML,脚本等.因此,根据使用框架的广泛程度,可以接听电话. (4认同)