【发布时间】:2019-04-17 00:05:19
【问题描述】:
我有一个std::u16string 的实例,我可以将它的c_str() 传递给需要LPCWSTR 的Win32 API,而无需任何类型的转换吗?例如,我可以安全地这样做吗:
auto u16s = std::u16string(u"Hello");
::SetWindowTextW(hWnd, reinterpret_cast<LPCWSTR>(u16s.c_str()));
更新,MSDN 说 here wchar_t 是 UTF-16LE,而 char16_t 只是 UTF-16,没有指定字节序。是否可以安全地假设 char16_t 在 Windows 上也始终是 UTF-16LE?或者那是特定于 MSVC 编译器的,因此如果我使用 GCC 编译,它可能是 UTF-32LE(或者可能是 UTF-16BE)?
【问题讨论】:
-
这将完全取决于工具链中使用的 C++ 编译器 - 通常是 Visual C++ 的某个版本,因为您通常将 Windows SDK 与 Visual Studio 捆绑在一起。但是可以使用带有 Windows SDK 的 GCC 和 MINGW 编译器(Code::Blocks 等),在这种情况下,您需要更加小心严格区分 Windows 类型(WCHAR、TCHAR、INT)和编译器类型( wchar_t、std::*、int32_t 等)以及特定编译器所做的任何事情。
标签: c++ windows winapi unicode char