【发布时间】:2019-06-15 07:24:01
【问题描述】:
代码-
#include <bits/stdc++.h>
using namespace std;
int *fun()
{ static int a;
++a;
cout<<"value of a = "<<a<<endl;
return &a;
}
int main() {
cout<<"simple call \n";
fun();
cout<<"calling inside sizeof \n";
cout<<sizeof(fun())<<endl;
cout<<"calling inside pow \n";
cout<<pow(2,*fun())<<endl;
return 0;
}
输出-
simple call
value of a = 1
calling inside sizeof
8
calling inside pow
value of a = 2
4
我的疑问是 sizeof 运算符如何计算函数返回类型的大小。我假设函数首先被调用,然后它返回地址到它的静态变量,并且 sizeof 运算符对该值进行操作。但是在这里,它直接打印 sizeof 指针。如果我在 pow() 中使用同样的乐趣,它会首先被调用,然后进行进一步的计算。
【问题讨论】:
-
sizeof是 C++ 中的编译时运算符。没有什么是“调用”、“存储”或“计算”的。您自己显式声明了函数返回类型。编译器知道它的大小。这就是所有需要的。不需要任何“静态变量”。 -
好的,那么它应该如何测量返回类型的大小。只看函数声明。