如何最佳地将 std::string_view 转换为 QString?

3

我有一个给我提供string_view的库。将其转换为QString(而不是QStringView)的最佳方法是什么?

我尝试使用QString::fromStdString(std::string(key).c_str()),但这是否是最佳方法呢?

1个回答

5
放弃使用"c_str()",因为"fromStdString()"接受一个"std::string"(因此名称中包含该字符串):
QString::fromStdString(std::string(key))

你也可以省略显式字符串构造,因为 std::string 可以从 std::string_view 构造:

QString::fromStdString(key)

话虽如此,如果 std::string_view 是以空字符结尾的(这并不保证),您可以使用接受 char* 参数的 QString 构造函数:

QString(key.data())

或者,如果 std::string_view 是使用 Latin-1 编码的,则可以使用:

QString::fromLatin1(key.data(), key.size())

或者,如果以UTF-8编码:

QString::fromUtf8(key.data(), key.size())

或者,如果使用用户的默认区域设置进行编码:

QString::fromLocal8Bit(key.data(), key.size())

使用std::string会涉及到一个额外的复制,而其有用的结果与fromUtf8方式相同。 - Ruslan
1
QString(key.data())存在问题,因为string_view::data不一定以空字符结尾:https://en.cppreference.com/w/cpp/string/basic_string_view/data#Notes - Matt Eding
@MattEding,也许你错过了我的回答中的一部分:“IF std::string_view 是以空字符结尾的(这是*不被保证的**),...” - Remy Lebeau
@RemyLebeau 我在发表评论时可能比我意识到的更疲倦。对此我感到抱歉。 - Matt Eding

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接