回答
因为C标准是这样说的,它得到的唯一投票。
作为后果:
- 的sizeof的操作数可以是parenthesised类型,
sizeof (int)
,而不是一个对象的表达。 - 括号是不必要的:
int a; printf("%d\n", sizeof a);
是完全正确的。他们经常被看到,首先是因为他们需要作为类型转换表达式的一部分,其次,因为sizeof具有很高的优先级,所以sizeof a + b
与sizeof (a+b)
不一样。但它们不是调用sizeof的一部分,它们是操作数的一部分。 - 你不能把sizeof的地址。
- 其是的sizeof的操作数未在运行时计算的表达式(
sizeof a++
不修改)。 - 作为sizeof的操作数的表达式可以具有除void或函数类型之外的任何类型。事实上,这是有点大小的点。
的函数将在所有这些方面不同。函数和一元运算符之间可能还有其他区别,但我认为这足以说明为什么sizeof不能成为函数,即使有理由希望它成为函数。
因为它不是一个功能。您可以使用它像:
int a;
printf("%d\n", sizeof a);
功能确实有入口点,代码等功能是在运行时运行(或内联)中,sizeof在编译时间待定。
它可被用作一个编译时间常数,这是唯一可能的,如果它是操作员而不是函数。例如:
union foo {
int i;
char c[sizeof(int)];
};
在语法上,如果不是运营商那么它必须是一个预处理宏,因为功能才能类型作为参数。这将是一个难以实现的宏,因为sizeof
可以将两种类型和变量作为参数。
+1,但请注意,当参数是VLA - 可变长度数组时,它不是编译时常量。 – 2009-09-08 12:29:16
因为:
- 当值传递给函数,对象的大小不传递给函数,所以
sizeof
“功能”将没有确定大小 - 方式在C中,函数只能接受一种类型的参数; sizeof()需要接受各种不同的事物(变量以及类型!你不能将类型传递给C中的函数)
- 调用函数涉及制作参数副本和其他不必要的开销
有从功能小性差异 - 的sizeof值分解在编译的时候,而不是在运行时!
不包括VLA - 可变长度数组 - 参数。 – 2009-09-08 12:28:21
因为C标准是这样说的,它得到的唯一投票。
,标准可能是正确的,因为sizeof
需要一个类型和
一般来说,如果一个函数的域或值域(或两者)包含的元素显著比实数越来越复杂,功能被称为操作员。相反,如果函数的域和共域都包含比实数更复杂的元素,那么该函数可能简单地称为函数。三角函数例如余弦是后一种情况的例子。
此外,当功能被经常使用,它们已经进化比一般的F(X,Y,Z,...)形式更快,更容易的符号,所产生的特殊形式也被称为运营商。示例包括中缀运算符,如加“+”和除法“/”,以及后缀运算符,如阶乘“!”。这种用法与所涉实体的复杂性无关。
这可能解释了C标准(和其他编程语言)在使用术语“操作符”和“功能”时的动机。 – 2009-09-08 12:17:06
因为它是一个编译时操作者的是,为了计算一个对象的大小,需要键入仅可在编译时间信息。这不适用于C++。
sizeof操作符是编译时的实体不运行时,不需要像括号的函数。当编译代码时,它会在编译时将该值替换为该变量的大小,但是在函数执行后的函数中,我们将知道返回值。
sizeof()
运营商是一个编译时会发生。它可以用来确定参数或参数。
为什么downvote? – 2012-10-03 14:36:22
- 1. java |运营商是为了什么?
- 2. 运营商的sizeof(c)中
- 3. 为什么运营商<被定义为非会员?
- 4. ||是什么运营商呢?
- 5. 什么是“|”运营商呢?
- 6. C未运营商为什么会
- 7. 你为什么要用!!运营商
- 8. javascript:什么是不是? (!!运营商)
- 9. 为什么sizeof(a)16? (sizeof int是4)
- 10. 为什么运营商**在运营商^工作的地方失败?
- 11. 符号被认为是一个标识符,而不是运营商
- 12. 运营商做什么?
- 13. ?的含义是什么?和??运营商
- 14. 什么是运营商=返回?
- 15. 什么是按位或|运营商呢?
- 16. 运营商:在C,它是什么?
- 17. 为什么在bash -n和-z测试运营商不为逆$ @
- 18. 为什么运营商超载行为如此奇怪
- 19. 为什么'\\'被认为是int?
- 20. 为什么运营商<<无法成功运作?
- 21. *(C++)运营商为了
- 22. 为盈方各运营商
- 23. 重载运营商为了
- 24. 奇怪的行为:SQL和运营商,在多个运营商
- 25. 为什么在std :: cout中使用“::”运算符而不是“。”运营商?
- 26. Mac OSX? Linux呢? X?侏儒? KDE?为什么osx被认为是linux,为什么它不被认为是linux?
- 27. 为什么我的运营商超载工作不正常?
- 28. 什么蟒蛇功能为PHP运营商更换functionaly $$
- 29. 为什么运营商||不在这里工作?
- 30. 为什么电话运营商新的明确
哇,正是我在想什么! – crashmstr 2009-09-08 11:58:28
不能说更好。 – 2009-09-08 11:58:46
真棒解释! – 2012-11-03 10:14:13