如何在c++中使用宽字符串文字,而不将L放在每个文字的前面
How to use wide string literals in c++ without putting L in front of each one
你必须原谅我的无知,但我不习惯在c++中使用宽字符集,但有没有一种方法可以让我在c++中使用宽字符串文字,而不在每个文字前面放一个L?
如果是,如何?
不,没有。您必须使用L前缀(或一个宏,如带有VC++的_T(),在为Unicode编译时无论如何都会扩展为L)。
新的C++0x标准定义了另一种方法:
http://en.wikipedia.org/wiki/C%2B%2B0x#New_string_literals
相关注释。。我正在试着做下面的
#define get_switch( m ) myclass::getSwitch(L##m)
这是一个宏,将扩展
get_switch(isrunning)
进入
myclass::getswitch(L"isrunning")
这在c++visualstudio2008中运行良好
但当我在macXcode(适用于iphone)下编译相同的代码时,我得到了错误:
error: 'L' was not defined in this scope.
EDIT:解决方案
#define get_switch( m ) myclass::getSwitch(L ## #m)
这在vc++和mac-xcode(gcc)上都有效
为什么不想用L作为字符串文字的前缀?这很简单——没有L的字符串是ANSI字符串(const char*
),有L的字符串则是宽字符串(const wchar_t*
)。有一个TEXT()
宏,它可以将字符串文字转换为ANSI或宽字符串,具体取决于当前项目的设置是否使用Uncode:
#ifdef UNICODE
#define TEXT(s) L ## s
#else
#define TEXT(s) s
#endif
还有_T()
宏,它相当于TEXT()
。
相关文章:
- constexpr 函数中的非文字(通过 std::is_constant_evaluated)
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 如何使用字符串文字作为宏参数
- 有没有办法从非C/C++文件中读取C++原始字符串文字的内容
- 构造<int>具有 2 个字符串文字的向量
- 如何在C++向量中奇数元素前面加上值-1,我在使用insert函数时遇到了问题
- 将数字打印成文字
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- 移除前面有空格的前2个字符串
- 方便地对C++中的所有字符串文字进行模糊处理
- 来自 DLL 的函数调用 [表观调用的括号前面的表达式必须具有(指向-)函数类型]
- 如何将一个窗口保留在另一个应用程序窗口的前面
- 如何重写全局方法名称以在调用原始方法之前将我的代码推到前面
- 表观调用前面的表达式必须具有指向 func 类型的指针
- C++17 十六进制浮点文字单精度后缀冲突?
- 常量函数,当其参数是对文字类型的引用时
- 字符数组前面的加号是什么意思?
- 在单链表前面添加一个节点后,我无法遍历每个节点
- ::(范围解析运算符)前面没有任何东西
- 如何在c++中使用宽字符串文字,而不将L放在每个文字的前面