从QString获取"const wchar_t*"的最快方法是什么?

A.D*_*esh 5 c++ qstring qt wchar-t

我想将QString变量传递给带const wchar_t*参数的函数.

安全解决方案是:

void foo(const wchar_t*);
QString x = "test";
foo(x.toStdWString().c_str());
Run Code Online (Sandbox Code Playgroud)

但它有转换成的开销wstring.有没有更快的解决方案?

这个解决方案怎么样?它安全便携吗?

foo(reinterpret_cast<const wchar_t*>(x.constData()));
Run Code Online (Sandbox Code Playgroud)

Jan*_*dec 6

不,重新解释强制转换是不安全的,并且在编码不同的某些平台上不起作用.QChar是16位,内部编码是UTF-16,但在Linux上wchar_t是32位UCS-4编码.

在Windows上wchar_t永远停留在16位的情况下,演员阵容会发生工作(它仍然是未定义的行为,但是msc ++当前没有做任何会破坏它的事情),但使用Qt的点是可移植的,对吧?

请注意,转换通过std::wstring的效率与您可以获得的效率相同.鉴于编码内存的差异必须分配一次,由std::wstring(即使在C++ 98中也可以省略返回副本)并且std::wstring::c_str()是一个微不足道的getter.