什么是QString和std::string的区别,为什么我不能说:
虽然两者都是字符串。
提前感谢,对于我的英语不好表示抱歉。
QString name;
std::string name1;
name = name1;
虽然两者都是字符串。
提前感谢,对于我的英语不好表示抱歉。
QString name;
std::string name1;
name = name1;
name = QString.fromStdString(name1);
std::string
包含utf-8数据。String
不是本地类型。规范也没有使用“本地类型”这个表达式。有“原始类型”和“引用类型”,String
属于后者。但是,文字和运算符重载的特殊处理使该类型变得特殊。 - Christian Hacklstd::string
是标准库的一部分,因此与其 Java 或 C# 的对应项(如果不计算独立实现)一样是 C++ 语言的一部分。无论是 import java.lang.String
还是 #include <string>
都没有关系。在 Java 或 C# 中,人们也可以编写基于 char[]
的自定义字符串类;只是这样一个类的无用性在这些语言中更加明显。 - Christian Hacklchar[]
类型,在C#和Java中则是一个String
类型。是的,你可以为C#和Java编写自己的基于char[]
的类,但你必须先将字面量从String类型转换!无论如何,我认为我们只是从不同的角度看待同一个想法。 - adelphusQString
的设计者提供了一个接受 const std::string &
参数的赋值运算符,但他们并没有这样做。std::string
获取 QString
,您需要使用 QString::fromStdString
,并且假定转换时 std::string
是以 UTF-8 编码的。您不能盲目地假设这是有效的:您必须了解您的 std::string
来自何处以及其所采用的编码方式。
std::string
中使用的编码的一些信息。请记住,QString
存储 UTF-16 Unicode 代码单元。它不直接存储 Unicode 字符,而 QChar
真正的含义是错称:它不是字符,而是 UTF-16 代码单元(不是代码点)。有时,当字符恰好具有单单元的 UTF-16 编码时,情况会“很好”,但这只是一个巧合。
std::string
更糟:它不知道它的编码方式,它只是一些字符的向量。它在许多应用程序中几乎无用,这些应用程序实际上关心这些字符的含义。QString
是Qt框架自己实现的字符串库,而std::string
是随其他C/C++库一起捆绑提供的字符串实现库,例如iostream
、stdio等。
您可以在这里进一步了解QString
。