static char zsocket_name[sizeof((struct sockaddr_un*)0)->sun_path] = {};
这很令人困惑,因为在我看来,sizeof
运算符的结果被指针间接引用以访问名为 sun_path
的结构字段,并且该值将用于静态存储中的数组大小。
然而,当我尝试使用一个简单的代码片段程序来计算表达式 sizeof((struct sockaddr_un*)0)->sun_path
时,它产生了 sockaddr_un
结构体成员 sun_path
的大小。
显然,这是原始行作者的意图; 但我发现它在语法上很令人困惑,因为它看起来像对 sizeof(...)
操作的结果进行指针解引用。
我对 sizeof(...)
的使用有什么误解吗? 为什么这个表达式会这样评估?
sizeof(type)
不同,sizeof表达式
形式没有括号,因此添加的任何括号都是表达式的一部分。 - fish2000std::declval
,它传达的意义更好,而且不像可怕的空指针解引用。 - user975989sizeof ( cout << "hello" << endl );
- Jean-Baptiste Yunès