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

时间:2013-08-14 10:03:03

标签: c++ qt std stdstring qstring

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

如果你绝对确定这两个字符串只包含拉丁字符,那么可以在没有中间对象的情况下完成:

bool latinCompare(const QString& qstr, const std::string& str)
{
  if( qstr.length() != (int)str.size() )
    return false;
  const QChar* qstrData = qstr.data();
  for( int i = 0; i < qstr.length(); ++i ) {
    if( qstrData[i].toLatin1() != str[i] )
      return false;
  }
  return true;
}

否则,您应该将std::string解码为QString并比较两个QStrings