我找不到有关 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/