【发布时间】:2015-02-11 07:18:09
【问题描述】:
我正在查看下面来自 JavascriptCore 的代码,但我不知道 && 在下面的上下文中是什么意思。一个地址的地址并没有真正的意义。
那么有人可以解释一下 && 在下面的上下文中是什么意思吗?
(bitwise_cast 使用联合来避免 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
【问题讨论】:
-
stackoverflow.com/questions/4549151/c-double-address-operator 可能重复? (如果没有,如果您还没有,您可能需要调查一下)
-
@ChrisSprague:不,这是在类型说明符中使用
&&的不同用法,表示 rvalue 引用。在这里,它被用作表达式中的运算符。 -
@MikeSeymour Yikes - 这对 C++ 中的
&&做了 3 种完全不同的解释。可怕的!感谢您的澄清。 -
@ChrisSprague:标准 C++ 中只有两个,因为这是一个扩展。但是
&有三种含义。以及static的几种含义。