sizeof运算符如何计算函数返回类型的大小?

时间:2019-06-15 07:24:01

标签: c++ sizeof

代码-

#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()中使用相同的乐趣,则会先调用它,然后再进行进一步的计算。

1 个答案:

答案 0 :(得分:3)

否,sizeof 从不计算其操作数(C可变长度数组除外,但是,由于这是C ++问题,所以无关紧要)。来自C++17 [expr.sizeof]

  

sizeof运算符产生其操作数的对象表示形式中的字节数。操作数可以是一个表达式,它是 未求值的操作数 (第8条),或者是带括号的type-id。

在您的情况下,由于fun()返回int *(ww编译器之所以知道这一点是因为您是这样告诉的),就好像您要了sizeof(int *)

相关问题