代码-
#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()中使用相同的乐趣,则会先调用它,然后再进行进一步的计算。
答案 0 :(得分:3)
否,sizeof
从不计算其操作数(C可变长度数组除外,但是,由于这是C ++问题,所以无关紧要)。来自C++17 [expr.sizeof]
:
sizeof运算符产生其操作数的对象表示形式中的字节数。操作数可以是一个表达式,它是 未求值的操作数 (第8条),或者是带括号的type-id。
在您的情况下,由于fun()
返回int *
(ww编译器之所以知道这一点是因为您是这样告诉的),就好像您要了sizeof(int *)
。