我有以下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();