sizeof() 函数后跟方括号

Nav*_*ore 2 c++

我看过一个例子,显示为

int n = sizeof(0)["abcdefghij"];
cout<<n;
Run Code Online (Sandbox Code Playgroud)

方括号里的那个东西是什么意思?我在某处读过(0)["abc"]相当于("abc")[0]. 意思是上面的表达式很简单

n = sizeof("abcdefghij")[0]; 
Run Code Online (Sandbox Code Playgroud)

即第一个元素。

phu*_*clv 6

首先,sizeof不是函数而是运算符

sizeof(0)["abcdefghij"] 可以解析为

  • sizeof( (0)["abcdefghij"] ), 或者
  • ( sizeof(0) )["abcdefghij"]

由于sizeof具有较低的优先级比[],前者将于

(0)["abcdefghij"]等价于"abcdefghij"[0]which is just 'a',所以整个事情与sizeof('a')C++ 中的 which is 1相同

GodBolt 上的演示,ideone

如果您替换为sizeof(0)sizeof(int)则会发生同样的事情,但现在(int)["abcdefghij"]无效,因此应该导致编译失败。大多数编译器都按预期报告错误,除了 ICC,所以看起来这是一个ICC 错误,它只是因为后者无效而选择了(sizeof(int))["abcdefghij"]sizeof((int)["abcdefghij"])

相关:为什么 sizeof(my_arr)[0] 编译并等于 sizeof(my_arr[0])?

  • 对“s/0/int”进行练习并讨论其差异将是一个有趣的练习。 (2认同)