c++ - 为什么 sizeof 适用于返回类型

标签 c++ sizeof

我找不到有关 sizeof 行为的信息(至少在 gcc 4.6+ 中)。以下代码有效并产生“预期”结果(4、1、8),但我想知道为什么。我检查了几个问题,但没有一个显示像这样的例子。

#include<iostream>

int f1(int) {
  return 0;
}

char f2(char) {
  return 0;
}

double f3() {
  return 0;
}

int main() {
  std::cout << sizeof(f1(0)) << std::endl;
  std::cout << sizeof(f2('0')) << std::endl;
  std::cout << sizeof(f3()) << std::endl;

  return 0;
}

如有答复,将不胜感激。 谢谢。

最佳答案

sizeof 运算符可以将类型或表达式作为参数并返回其参数的大小。您正在使用表达式,因此它返回这些表达式的大小。表达式不会在运行时求值——因此函数永远不会被调用。但是使用正确的(重载的)函数来确定结果的大小。

在(现已删除的)评论中,user1919074说:

sizeof(f1) would not work

脑放屁

在 C 语言中,sizeof(f1) 可以工作,因为它会返回函数指针的大小。

sizeof() 运算符不能直接应用于函数名称。它有特殊的规则,当应用于数组时,不会发生指向指针的正常“衰减”。同样,sizeof() 不会将函数名称更改为函数指针。 (当然,您必须用 -pedantic 使劲戳 GCC,让它给出警告/错误;否则,它返回 1 作为函数的大小。)

关于c++ - 为什么 sizeof 适用于返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16484644/

相关文章:

c - (int) sizeof(void *) 和 int 有什么区别?

c++ - 当内容的大小发生变化时,QTextEdit 会触发什么事件(如果有的话)?

c++ - 原始缓冲区的分配/损坏 - 如何继续调试?

c - 为什么 sizeof(x++) 不增加 x?

c++ - 是什么导致继承和成员之间的结构体大小不同?

c++ - Char 的大小与字符串不同

c - 如何以及为什么使用 c 中的 sizeof(a)/sizeof(a[0]) 来计算数组中的元素数

c++ - 覆盖 Ctrl-C

c++ - 使用 C++ 段错误的 2 个 YUV 文件的 PSNR 计算器

c++ - “[Warning] extra tokens at end of”,同时编译我的代码