猿问

为什么sizeof被视为运算符?

为什么将其sizeof视为运算符而不是函数?

要成为运营商,必须具备什么财产?


叮当猫咪
浏览 696回答 4
4回答

守候你守候我

因为C标准是这样说的,所以它是唯一的选择。结果:sizeof的操作数可以是带括号的类型sizeof (int),而不是对象表达式。括号是不必要的:int a; printf("%d\n", sizeof a);完全可以。人们经常看到它们,首先是因为它们需要作为类型转换表达式的一部分,其次是因为sizeof具有很高的优先级,因此sizeof a + b与并不相同sizeof (a+b)。但是它们不是sizeof调用的一部分,而是操作数的一部分。您不能使用sizeof的地址。作为sizeof操作数的表达式不会在运行时求值(sizeof a++不会修改a)。作为sizeof操作数的表达式可以具有除void或函数类型以外的任何类型。确实,这就是sizeof的重点。在所有这些点上,功能都会有所不同。函数和一元运算符之间可能还存在其他差异,但是我认为这足以说明为什么sizeof不能成为函数,即使有理由要这样做。

暮色呼如

它可以用作编译时常量,仅当它是运算符而不是函数时才可能使用。例如:union foo {    int i;    char c[sizeof(int)];};从语法上讲,如果它不是运算符,则它必须是预处理器宏,因为函数不能将类型作为参数。这将是很难实现的宏,因为sizeof它既可以将类型也可以将变量作为参数。

慕的地6264312

因为C标准是这样说的,所以它是唯一的选择。该标准可能是正确的,因为sizeof采用类型和通常,如果函数的域或共域(或两者)包含比实数复杂得多的元素,则该函数称为运算符。相反,如果函数的域和共域都不包含比实数更复杂的元素,则该函数可能会简单地称为函数。余弦等三角函数就是后一种情况的示例。另外,当函数被使用得比通用F(x,y,z,...)形式频繁地使用时,它们的符号表示法发展得更快或更容易时,所得的特殊形式也称为运算符。示例包括中缀运算符(例如加号“ +”和除号“ /”)以及后缀运算符(例如阶乘“!”)。这种用法与所涉及实体的复杂性无关。

翻过高山走不出你

因为它不是功能。您可以这样使用它:int a;printf("%d\n", sizeof a);函数确实具有入口点,代码等。函数要在运行时(或内联)运行,sizeof必须在编译时确定。
随时随地看视频慕课网APP
我要回答