C++ &&;在按位_cast的上下文中<;无效*>;(操作码);

C++ &&;在按位_cast的上下文中<;无效*>;(操作码);,c++,webkit,C++,Webkit,我正在看下面的代码,它来自JavascriptCore,我不知道&在下面的上下文中是什么意思。一个地址中的一个地址实际上没有意义 那么,有人能在下面的上下文中解释一下&&的含义吗 (按位_转换使用并集,以避免重新解释_转换带来的严格别名问题) &和/代码>有3种完全不同的解释。吓人的!谢谢你的澄清。@克里斯普拉格:只有两个标准C++,因为这是一个扩展。但是和有三种含义。以及静态的几种含义。 void * ptr = &&label; goto *ptr;

我正在看下面的代码,它来自JavascriptCore,我不知道&在下面的上下文中是什么意思。一个地址中的一个地址实际上没有意义

那么,有人能在下面的上下文中解释一下&&的含义吗

(按位_转换使用并集,以避免重新解释_转换带来的严格别名问题)

<下面的代码编译在CLAN(大概是GCC)上,但是不在我们自己的专有C++编译器上编译。 可以找到完整的源代码

#如果启用(计算的操作码)
Opcode*opcodeMap=LLInt::opcodeMap();
#定义操作码\项(\操作码,长度)\
操作码映射[_操作码]=按位转换(&&&&_操作码)// 这是一个GCC扩展:

给定一个
goto
标签

label:
在标准C++中,你只能直接跳到:

goto label;
但是GCC允许您以非标准方式使用
&
作为一元运算符存储其地址(类似于
&
获取对象、函数或成员的地址):

稍后再使用该指针:

goto *ptr;

对于没有此扩展名的编译器,似乎可以通过预处理器禁用此功能。它将使用基于
开关
语句的某种方案,而不是计算的跳转标签。

是否可能重复?(如果没有,如果还没有的话,您可能想研究一下这个问题)@ChrisSprague:No,这是类型说明符中
&&
的不同用法,用于表示右值引用。这里,它被用作表达式中的运算符。@ MikEyMyOyIKES——对C++中的代码> &和/代码>有3种完全不同的解释。吓人的!谢谢你的澄清。@克里斯普拉格:只有两个标准C++,因为这是一个扩展。但是
有三种含义。以及静态
的几种含义。
void * ptr = &&label;
goto *ptr;