我看过一个例子,显示为
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)
即第一个元素。
sizeof(0)["abcdefghij"] 可以解析为
sizeof( (0)["abcdefghij"] ), 或者( sizeof(0) )["abcdefghij"]由于sizeof具有较低的优先级比[],前者将于
(0)["abcdefghij"]等价于"abcdefghij"[0]which is just 'a',所以整个事情与sizeof('a')C++ 中的 which is 1相同
如果您替换为sizeof(0),sizeof(int)则会发生同样的事情,但现在(int)["abcdefghij"]无效,因此应该导致编译失败。大多数编译器都按预期报告错误,除了 ICC,所以看起来这是一个ICC 错误,它只是因为后者无效而选择了(sizeof(int))["abcdefghij"]sizeof((int)["abcdefghij"])
相关:为什么 sizeof(my_arr)[0] 编译并等于 sizeof(my_arr[0])?
| 归档时间: |
|
| 查看次数: |
110 次 |
| 最近记录: |