我对sizeof(function)
感到有点困惑。我以前认为sizeof
运算符对类对象,指针和引用进行操作。
sizeof运算符可以在C ++中运行什么操作数?
sizeof(function)
是否有意义?
答案 0 :(得分:5)
根据:http://en.cppreference.com/w/cpp/language/sizeof
" ...
sizeof
不能与函数类型,不完整类型或 位字段glvalues"
或来自http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf的C ++标准2012年工作草案:
第5.3.3节尺寸 " sizeof运算符不应用于具有的表达式 函数或不完整类型,对于其底层的枚举类型 在声明所有枚举数之前,type不是固定的 这些类型的括号名称,或指定的左值 比特字段。"
答案 1 :(得分:3)
<强>&GT; sizeof运算符可以在C ++中运行哪些操作数?
来自ChronoUnit.MINUTES
(草案N3337,第105页,第二页 5.3.3 )
sizeof运算符产生对象中的字节数 表示其操作数。操作数是表达式, 这是一个未经评估的操作数(第5条), 或带括号的 type-id 。 (第5条 (草案N3337,第83页)))
<强>&GT; sizeof(函数)是否有意义?
在C++11 ISO Standerds / (草案N3337,第105页,第二页 5.3.3 )下的文件中说明:
sizeof
运算符不应用于具有的表达式 功能或不完整类型,枚举类型,其基础 在声明所有枚举数之前,type不是固定的 此类型的带括号的名称,或左值 指定一个位域。- sizeof运算符可以应用于指向函数的指针,但是 不得直接应用于功能。
- 左值到右值,数组到指针和函数到指针标准转换不适用于
sizeof
的操作数。- 醇>
sizeof(char)
,sizeof(signed char)
和sizeof(unsigned char)
是1.应用于任何其他8.5.2.3的sizeof的结果是实现定义的。
答案 2 :(得分:2)
虽然正如Avi Weiss和JeJo的答案中正确指出的那样sizeof(func)
无效,但如果你尝试的话,你不一定会收到错误。
在GNU C中,sizeof(void)
和sizeof(func)
被允许作为扩展并评估为1. This is a documented extension.根据标准的要求,您将收到警告,但不是错误。此扩展也可在C ++模式下使用。