我找不到有关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;
}
非常感谢答案。 感谢。
答案 0 :(得分:4)
sizeof
运算符可以将类型或表达式作为参数,并返回其参数的大小。您正在使用表达式,因此它返回这些表达式的大小。表达式不在运行时计算 - 因此永远不会调用函数。但正确(重载)函数用于确定结果的大小。
在(现已删除的)评论中,user1919074说:
sizeof(f1)
不起作用
脑屁
在C中, sizeof(f1)
将起作用,因为它将返回指向函数的指针的大小。
sizeof()
运算符不能直接应用于函数名称。它有特殊的规则,当应用于数组时,不会发生指针的正常“衰减”。同样,函数名称更改为函数指针不会发生sizeof()
。 (当然,你必须用-pedantic
来强制攻击GCC以使其发出警告/错误;否则,它将返回1作为函数的大小。)
答案 1 :(得分:2)
功能中发生了什么
int f1(int) {
return int(0);
}
char f1(char) {
return char(0);
}
double f1() {
return double(0);
}
后来发生了什么。
std::cout << sizeof(int(0)) << std::endl;
std::cout << sizeof(char('0')) << std::endl;
std::cout << sizeof(double(0)) << std::endl;
因为您要从函数
打印sizeof
返回的value
答案 2 :(得分:1)
ISO/IEC 14882说(第5.3.3节 - 第79页): 说
“size运算符不应用于具有的表达式 功能或不完整的类型,......“
还要注意启用了-pedantic选项的编译警告...
warning: invalid application of 'sizeof' to a function type
答案 3 :(得分:0)
f1返回一个占4个字节的整数 f2返回一个占用1个字节的字符 f3返回一个需要8个字节的double。
所以sizeof()所做的就是返回其参数的大小。