如何在c ++中使用宽字符串文字而不将L放在每个文字的前面

时间:2008-11-03 21:55:10

标签: c++ string literals

你必须原谅我的无知,但我不习惯在c ++中使用宽字符集,但是有没有一种方法可以在c ++中使用宽字符串文字而不在每个文字前放置一个L?

若然,怎么样?

4 个答案:

答案 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()