advantage of QString over std::string
advantage of QString over std::string
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_string
。 std::string
和std::wstring
只不过是char
和wchar
std::basic_string
专业化。还有针对 UTF-16 和 UTF-32 存储的专用std::u16string
和std::u32string
。
无论如何,如果你必须使用Qt,QString
可能永远是比任何标准库字符串更好的选择,因为整个Qt框架都是为了使用它而设计的。
- cppcheck在const std::string[]上引发警告
- 将std::string传递给WriteConsole API
- 为std::string的某个索引赋值
- std中有类似find_last_of的函数,而string中没有
- 使用 std::string () const 函数启动线程或未来
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- 如何更改大小(std::string)
- std::string 的对象真的可以移动吗?
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- 无法从 std::string 中提取C++ Unicode 符号
- std::string 构造函数如何处理固定大小的 char[]?
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串
- C++:考虑C++ std::string 中双引号 (") 的字面含义,而不使用反斜杠 (\)
- 'int main(int, int, std::__cxx11::string, std::__cxx11::string)'只需要零或两个参数 [-Wmain]
- C++ 在列表和列表之间选择返回类型<<string>std::p air<string,string>>
- std::string, std::wstring and UTF8
- uan inplace replacement of std::string/std::wstring?
- #define Glib::string std:wstring
- 从 std::string & std::wstring 中获取 char 整数值
- BSTR转换为std::string(std::wstring),反之亦然