sizeof()函数后跟方括号
我看过一个例子,显示为
int n = sizeof(0)["abcdefghij"];
cout<<n;
方括号里的那个东西是什么意思?我在某处读过(0)["abc"]相当于("abc")[0]. 意思是上面的表达式很简单
n = sizeof("abcdefghij")[0];
即第一个元素。
回答
首先,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])?
- It would be an interesting exercise to `s/0/int` and discuss the difference.