gpt4 book ai didi

c++ - && 在 bitwise_cast(&&__opcode) 上下文中的含义;

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:18:44 27 4
gpt4 key购买 nike

我正在查看下面来自 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com