QString和std :: string之间的区别

MMM*_*MMM 1 c++ qt qt-creator

什么是QString和std :: string之间的区别,为什么我不能说:

    QString name;
    std::string name1;
    name = name1;
Run Code Online (Sandbox Code Playgroud)

虽然两者都是字符串

提前谢谢,抱歉我的英语不好

lis*_*rus 5

编译器将如何推断"两者都是字符串"以及如何将一个字符串转换为另一个字符串?

虽然这两个类都代表字符串,但它们仍然是不同的,不相关的类.除非明确说明(如适当的转换运算符或构造函数),否则它们不能从一个转换为另一个,就像您不能使用简单赋值转换std::vector<int>std::list<int>.

QString有一个静态方法fromStdString,可以为你工作:

name = QString.fromStdString(name1);
Run Code Online (Sandbox Code Playgroud)

请注意,它预计std::string包含utf-8数据.


ade*_*hus 5

与 C#、Java 等语言不同,C++ 语言中没有原生字符串类型。当您像"abc"在源代码中一样键入字符串文字时,编译器会将它们转换为char类型的数组,末尾带有一个零值元素(形成众所周知的“以零结尾的字符串”值);

为了使开发人员的工作更轻松,C++ 包括一个标准的字符串库类 (std::string),但这只是处理零终止字符数组的一种实现。QString 是另一种实现。当然,还有数百个由开发人员编写以满足他们自己的需求。

所以你不能直接从一个分配到另一个的原因是它们是完全不同的类型 - 编译器不知道两者都用于操作字符串 - 它只是将它们视为单独的、不兼容的类。

  • 我不同意这种解释。对我来说,`std::string` 是 *standard* 库的一部分,因此是 C++ *language* 的一部分,就像它的 Java 或 C# 对应物(如果你不计算独立的实现)。你是`import java.lang.String` 还是`#include &lt;string&gt;` 都没有关系。也可以用 Java 或 C# 编写自己的基于 `char[]` 的自定义字符串类;只是这样的类的无用性在这些语言中会更*明显*。 (2认同)