你必须原谅我的无知,但我不习惯在c ++中使用宽字符集,但是有没有一种方法可以在c ++中使用宽字符串文字而不在每个文字前放置一个L?
若然,怎么样?
答案 0 :(得分:25)
不,没有。你必须使用L前缀(或一个宏,如_T()与VC ++,当编译为Unicode时,无论如何都会扩展为L。)
答案 1 :(得分:18)
新的C ++ 0x标准定义了另一种方法:
http://en.wikipedia.org/wiki/C%2B%2B0x#New_string_literals
答案 2 :(得分:3)
相关说明.. 我正在尝试做以下事情
#define get_switch( m ) myclass::getSwitch(L##m)
这是一个将扩展的宏
get_switch(isrunning)
到
myclass::getswitch(L"isrunning")
这在c ++ visualstudio 2008中运行良好
但是当我在mac Xcode(对于iphone)下编译相同的代码时,我得到错误:
error: 'L' was not defined in this scope.
编辑:解决方案
#define get_switch( m ) myclass::getSwitch(L ## #m)
这适用于vc ++和mac xcode(gcc)
答案 3 :(得分:1)
为什么你不想在字符串文字前加上L?这很简单 - 没有L的字符串是ANSI字符串(const char*
),带有L的字符串是宽字符字符串(const wchar_t*
)。有TEXT()
宏,它将字符串文字变成ANSI或宽字符串,具体取决于当前项目设置为使用解码:
#ifdef UNICODE
#define TEXT(s) L ## s
#else
#define TEXT(s) s
#endif
还有_T()
宏,相当于TEXT()
。