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

标签 c++ qt qstring wchar-t

我想将一个 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/

相关文章:

c++ - std::string 构造函数损坏指针

c++ - 在 Qt 中的对象之间发送自定义事件而不关联它们

html - 使用 HTML 标签从 QString 获取纯文本

c++ - 字符转QString

c++ - C++ 应用程序的框架

c++ - 将 char[] 转换为 Qstring 添加额外的 3 个字符

c++ - 如果我们有一个包含所有代码的单个文件项目,我们可以不使用链接器吗?

c++ - 有没有办法在 C++ 中将字节数组转换为数字?

c++ - 虚拟析构函数将对象移出 rodata 部分

c - 如何在 qt creator 中为 gcc 添加选项?