问题描述
我有以下 wstring:
std::wstring testVal("Test");
我需要将其放入此值中:
static const TCHAR* s_test_val;
到目前为止我已经尝试过:
static const TCHAR* s_test_val = (const wchar_t*) testVal.c_str();
static const TCHAR* s_test_val = (wchar_t*) testVal.c_str();
static const TCHAR* s_test_val = (TCHAR*) testVal.c_str();
static const TCHAR* s_test_val = (TCHAR*) testVal;
但没有成功; s_test_val 一直显示为空字符串。
解决方法
static const TCHAR* s_test_val = testVal.c_str();
如果定义了 UNICODE
,则此方法是正确的,在这种情况下,TCHAR
将是 wchar_t
的别名。
如果 UNICODE
未定义,则您需要执行一些转换,但支持非 unicode 构建的努力可能不值得。在这种情况下,您使用强制转换的尝试会默默地做错误的事情,而这会安全地产生错误。
如果您不关心非 unicode 支持(我想不出任何人会关心的原因),那么我建议您尽量减少对 TCHAR
的完全使用。
除非 Windows 9x 支持必不可少,否则不要使用 TCHAR
。此外,指向自动变量的静态指针非常可疑。你要么想要:
static wchar_t constexpr const* s_test_val = L"Test";
或
std::wstring testVal = L"Test";
wchar_t const* s_test_val = testVal.c_str();
或
std::wstring testVal = L"Test";
auto const s_test_val = testVal.c_str();