【发布时间】:2015-07-24 03:22:53
【问题描述】:
我是 C++ 和 Qt 的新手。几天来我一直在搞乱 Qt Creator,真正让我印象深刻的是 GUI 组件如何只接受 const QString& 而不是 string 或 std::wstring。为了与此保持一致,我一直在尝试从我的大多数函数调用中接受并返回 QString,但是我发现自己在使用大多数标准库设施时经常与 std::string 进行转换。
我的问题是,如果std::string 是标准库的一部分,那么QString 的用途是什么?我想这对已经在使用 Qt 并且不希望再次依赖 #include <string> 的人是有益的,但老实说,如果您想对您的应用程序做任何有用的事情,您将需要 std::string。 (这尤其适用于QChar,因为char 是内置的。)
有人可以向我解释为什么这不是重新发明轮子,以及这对跨平台有何帮助?
【问题讨论】:
-
一个原因是 Qt 使用 UTF-8 文本格式,而 std::string 不支持 UTF-8。 (也就是说,您可以在 std::string 中存储 UTF-8 字符串,但如果您尝试使用 std::string 的迭代器迭代字符串,您将迭代字节,而不是字符,这通常不会你想要什么)
-
@JeremyFriesner 没错,但我们已经有了
std::wstring和wchar_t(我相信是 UTF-16),所以我不认为仅凭这一点就可以证明创建一个全新的字符串类。 -
utf-16 和 utf-8 是不同的编码。 utf-8 可以做 utf-16 做不到的事情。
-
std::string是这些在课堂之外不再有意义的事情之一。完全不便携,如果你想做除了简单地拿着字符串之外的任何事情,也毫无用处。std::string是 C++ 标准化工作的一个混蛋。就像其他 C++ 容器非常有用一样,字符串也无用。如果您从 C 的strxxx函数移植,这是有道理的,仅此而已。 -
Kuba 当你说不可移植时,你的意思是不可移植跨计算机架构,还是不可移植以用于不同的人类语言?