我想将一个 QString
变量传递给一个带有 const wchar_t*
参数的函数。
安全的解决方案是:
void foo(const wchar_t*);
QString x = "test";
foo(x.toStdWString().c_str());
但它有转换为 wstring
的开销。有没有更快的解决方案?
这个解决方案怎么样?安全便携吗?
foo(reinterpret_cast<const wchar_t*>(x.constData()));
最佳答案
不,重新解释转换是不安全的,并且在编码不同的某些平台上不起作用。 QChar
是16位的,内部编码是UTF-16,但是在Linux上wchar_t
是32位的UCS-4编码。
在 wchar_t
永远停留在 16 位的 Windows 上,转换会碰巧起作用(它仍然是未定义的行为,但 msc++ 目前没有做任何会破坏它的事情),但是使用Qt 是可移植的,对吧?
请注意,通过 std::wstring
进行的转换会尽可能高效。考虑到编码内存必须分配一次的差异,这由 std::wstring
(即使在 C++98 中也可以省略返回拷贝)和 std::wstring 管理::c_str()
是一个简单的 getter。
关于c++ - 从 QString 获取 "const wchar_t*"最快的方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23124781/