下面是来自JavascriptCore的代码,我不知道&&在下面的上下文中有什么意义。地址的地址没有实际意义。
因此,有人能在下面的上下文中解释&的含义。
( bitwise_cast使用联合来避免reinterpret_cast带来的严格混叠问题)
下面的代码是在clang (大概还有gcc)上编译的,而不是在我们自己的专有C++编译器上编译的。
完整的源代码可以找到这里。
#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发布于 2014-12-12 14:46:53
这是GCC的分机:计算goto。
给定goto标签
label:在标准C++中,您只能直接跳到它:
goto label;但是GCC允许您使用&&作为一元运算符(类似于获取对象、函数或成员的地址的& )的非标准用法来存储其地址:
void * ptr = &&label;稍后使用该指针:
goto *ptr;看起来您可以通过预处理器禁用它,因为您的编译器没有这个扩展名。它将使用一些基于switch语句的方案,而不是计算跳转标签。
https://stackoverflow.com/questions/27446016
复制相似问题