sizeof运算符可以在C ++中运行什么操作数? sizeof(函数)有意义吗?

时间:2018-06-16 05:21:40

标签: c++ function c++11 sizeof

我对sizeof(function)感到有点困惑。我以前认为sizeof运算符对类对象,指针和引用进行操作。

sizeof运算符可以在C ++中运行什么操作数

sizeof(function)是否有意义?

3 个答案:

答案 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 )下的文件中说明:

  
      
  1. sizeof运算符不应用于具有的表达式   功能不完整类型枚举类型,其基础   在声明所有枚举数之前,type不是固定的   此类型的带括号的名称,或左值   指定一个位域。
  2.   
  3. sizeof运算符可以应用于指向函数的指针,但是   不得直接应用于功能
  4.   
  5. 左值到右值数组到指针函数到指针标准转换不适用于sizeof的操作数。
  6.   
  7. sizeof(char)sizeof(signed char)sizeof(unsigned char)   是1.应用于任何其他8.5.2.3的sizeof的结果是实现定义的。
  8.   

答案 2 :(得分:2)

虽然正如Avi Weiss和JeJo的答案中正确指出的那样sizeof(func)无效,但如果你尝试的话,你不一定会收到错误。

在GNU C中,sizeof(void)sizeof(func)被允许作为扩展并评估为1. This is a documented extension.根据标准的要求,您将收到警告,但不是错误。此扩展也可在C ++模式下使用。