我有一个给我提供string_view
的库。将其转换为QString
(而不是QStringView
)的最佳方法是什么?
我尝试使用QString::fromStdString(std::string(key).c_str())
,但这是否是最佳方法呢?
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
方式相同。 - RuslanQString(key.data())
存在问题,因为string_view::data
不一定以空字符结尾:https://en.cppreference.com/w/cpp/string/basic_string_view/data#Notes - Matt Edingstd::string_view
是以空字符结尾的(这是*不被保证的**),...” - Remy Lebeau