有效地比较QString和std :: string是否相等

Ber*_*Ber 5 c++ qstring qt std stdstring

我想有效地比较QString和std :: string的(in)相等.哪种方法最好,可能没有创建中间对象?

Shf*_*Shf 5

QString::fromStdString()QString::toStdString()想到,但它们创建了字符串的临时副本,所以据我所知,如果您不想拥有临时对象,则必须自己编写此函数(尽管什么更有效是一个问题)。

例子:

    QString string="string";
    std::string stdstring="string";
    qDebug()<< (string.toStdString()==stdstring); // true


    QString string="string";
    std::string stdstring="std string";
    qDebug()<< (str==QString::fromStdString(stdstring)); // false
Run Code Online (Sandbox Code Playgroud)

顺便在qt5中,QString::toStdString()现在使用QString::toUtf8()来执行转换,因此字符串的Unicode属性不会丢失(qt-project.org/doc/qt-5.0/qtcore/qstring.html#toStdString

  • 第一个选项 (string.toStdString()==stdstring) 在 ARM 上的 Windows 上导致内存泄漏(不是桌面或 Linux 问题)。第二个选项 (str==QString::fromStdString(stdstring)) 工作正常。 (2认同)