Вы не можете - не без поддержки c ++ 0x.c ++ 0x определяет следующие способы объявления строковых литералов:
- "строка символов char в некоторых кодировках, определенных реализацией" - char
- u8 "String of utf8 chars" - char
- u "строка символов utf16" - char16_t
- U "строка символов utf32" - char32_t
- L "строка wchar_t в некоторых кодировках, определенных реализацией" - wchar_t
Пока широко не поддерживается c ++ 0x, единственный способ кодировать строку utf-16 кросс-платформенным способом - разбить ее на биты:
// make a char16_t type to stand in until msvc/gcc/etc supports
// c++0x utf string literals
#ifndef CHAR16_T_DEFINED
#define CHAR16_T_DEFINED
typedef unsigned short char16_t;
#endif
const char16_t strABC[] = { 'a', 'b', 'c', '\0' };
// the same declaration would work for a type that changes from 8 to 16 bits:
#ifdef _UNICODE
typedef char16_t TCHAR;
#else
typedef char TCHAR;
#endif
const TCHAR strABC2[] = { 'a', 'b', 'b', '\0' };
Макрос _T может доставлять товары только на платформах, где ширина wchar_t составляет 16 бит.И альтернатива все еще не является кроссплатформенной: кодирование char и wchar_t определяется реализацией, поэтому «a» не обязательно кодирует кодовую точку unicode для «a» (0x61).Таким образом, чтобы быть строго точным, это единственный способ написать строку:
const TCHAR strABC[] = { '\x61', '\x62', '\x63', '\0' };
Что просто ужасно.