13

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

如果是这样,怎么做?

4

4 回答 4

25

不,没有。您必须使用 L 前缀(或 _T() 之类的宏和 VC++,在为 Unicode 编译时无论如何都会扩展为 L)。

于 2008-11-03T21:59:19.577 回答
18

新的 C++0x 标准定义了另一种方法:
http ://en.wikipedia.org/wiki/C%2B%2B0x#New_string_literals

于 2008-11-03T22:40:48.730 回答
3

在相关说明..我正在尝试执行以下操作

#define  get_switch( m )   myclass::getSwitch(L##m)

这是一个将扩展的宏

get_switch(isrunning)

进入

myclass::getswitch(L"isrunning")

这在 c++ visualstudio 2008 中运行良好

但是当我在 mac Xcode (for iphone) 下编译相同的代码时,我得到了错误:

error: 'L' was not defined in this scope.

编辑:解决方案

#define  get_switch( m )   myclass::getSwitch(L ## #m)

这适用于 vc++ 和 mac xcode (gcc)

于 2009-01-26T15:35:39.407 回答
1

为什么你不想用 L 作为字符串文字的前缀?这很简单——不带 L 的字符串是 ANSI 字符串 ( const char*),带 L 的字符串是宽字符串 ( const wchar_t*)。有一个TEXT()宏,它根据当前项目设置为使用 Uncode 将字符串文字转换为 ANSI 或宽字符串:


#ifdef UNICODE
#define TEXT(s) L ## s
#else
#define TEXT(s) s
#endif

还有_T()宏,相当于TEXT().

于 2008-11-03T21:58:46.990 回答