什么时候我们应该使用带括号和不带括号的sizeof

typedef struct rem{ int addr; char addrbuf[32]; } foo; 

这两个代码都返回相同的结果

 foo addr; printf("size is: %d\n",sizeof addr); printf("size is: %d\n",sizeof (foo)); 

大小是:36

大小是:36

但是什么时候我们应该使用带括号和不带括号的sizeof

sizeof类型一起使用时需要围绕类型使用括号。 将它与表达式一起使用时则不会。 但是你也可以在这种情况下包含它们,在这种情况下你不必担心运算符优先级。 对于像这样的不常见的运营商,更少的人会确定优先级,因此清晰度肯定有帮助。

所以我会说最好总是使用它们。

[expr.sizeof] / 1:

操作数是一个表达式 ,它是一个未评估的操作数(第5章),或带括号的type-id

因此,括号仅适用于类型。 如果您更喜欢使用括号来表示清晰度和一致性(就像我一样),您可以随时使用它们,因为表达式周围的括号形成另一个表达式
sizeof的运算符优先级不是很清楚,可能会引起烦恼。

此外,对于sizeof...运算符,您始终必须使用括号(一致性的另一个原因)。