我想有效地比较 QString 和 std::string 的(不)相等性。哪个是最好的方法,可能不创建中间对象?
问问题
7534 次
2 回答
5
QString::fromStdString()
并且QString::toStdString()
想到了,但是它们创建了字符串的临时副本,所以afaik,如果您不想拥有临时对象,则必须自己编写此函数(尽管更有效的是一个问题)。
例子:
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
于 2013-08-14T10:39:03.207 回答
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
a解码QString
并比较两者QStrings
。
于 2013-08-14T11:48:36.640 回答