ben*_*wad 2 c++ clang visual-c++ c-preprocessor
我有以下代码,有人在MSVC上工作给我:
#define MAP1(x, y) map[#x] = #@y;
Run Code Online (Sandbox Code Playgroud)
我在Xcode上,使用Clang,从各种谷歌搜索中我发现这被称为"charizing运算符",并且特定于MSVC的预处理器.有没有办法在使用Clang时模拟此运算符的功能?我尝试删除@但收到以下错误消息:
Assigning to 'int' from incompatible type 'const char[2]'
Run Code Online (Sandbox Code Playgroud)
是否会对'int'进行明确的演绎或者是一个不同的操作员?
小智 5
字符串化运算符(标准C++)转换a为"a",因此charizing运算符听起来就像它变成a了'a'.您可以在简单的情况下,获得'a'从"a"采取的第一个字符.
#define MAP1(x, y) map[#x] = static_cast<const char(&)[2]>(#y)[0];
Run Code Online (Sandbox Code Playgroud)
该static_cast来const char(&)[2]确保你得到一个编译时错误,如果你没有得到长度为1,这是两个字符,如果算上结尾的字符串'\0'.#y[0]无论字符串的长度如何,普通都会默默地接受第一个字符.
| 归档时间: |
|
| 查看次数: |
476 次 |
| 最近记录: |