作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在查看下面来自 JavascriptCore 的代码,但我不知道 && 在下面的上下文中的含义。地址的地址没有任何意义。
有人可以解释下 && 在下面的上下文中的含义吗。
(bitwise_cast 使用 union 来避免 reinterpret_cast 带来的严格别名问题)
下面的代码在 clang(可能还有 gcc)上编译,但不在我们自己专有的 C++ 编译器上编译。
可以找到完整的源代码 here .
#if ENABLE(COMPUTED_GOTO_OPCODES)
Opcode* opcodeMap = LLInt::opcodeMap();
#define OPCODE_ENTRY(__opcode, length) \
opcodeMap[__opcode] = bitwise_cast<void*>(&&__opcode); //<---- The double &&
FOR_EACH_OPCODE_ID(OPCODE_ENTRY)
#undef OPCODE_ENTRY
#define LLINT_OPCODE_ENTRY(__opcode, length) \
opcodeMap[__opcode] = bitwise_cast<void*>(&&__opcode);
FOR_EACH_LLINT_NATIVE_HELPER(LLINT_OPCODE_ENTRY)
#undef LLINT_OPCODE_ENTRY
#endif
最佳答案
这是一个 GCC 扩展:computed goto .
给定一个goto
标签
label:
在标准C++中,只能直接跳转到:
goto label;
但 GCC 允许您使用 &&
作为一元运算符(类似于 &
获取对象地址,函数)来存储其地址, 或成员):
void * ptr = &&label;
稍后使用该指针:
goto *ptr;
看起来你可以通过预处理器禁用它,因为你的编译器没有这个扩展。它将使用一些基于 switch
语句的方案,而不是计算出的跳转标签。
关于c++ - && 在 bitwise_cast<void*>(&&__opcode) 上下文中的含义;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27446016/
我正在查看下面来自 JavascriptCore 的代码,但我不知道 && 在下面的上下文中的含义。地址的地址没有任何意义。 有人可以解释下 && 在下面的上下文中的含义吗。 (bitwise_cas
我是一名优秀的程序员,十分优秀!