首页 > 解决方案 > 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() 中使用相同的乐趣,则首先调用它,然后进行进一步的计算。

标签: c++sizeof

解决方案


不,sizeof 从不评估其操作数(C 可变长度数组除外,但由于这是一个 C++ 问题,因此无关紧要)。来自C++17 [expr.sizeof]

sizeof 运算符产生其操作数的对象表示中的字节数。操作数要么是一个表达式,它是一个未计算的操作数(第 8 条),要么是一个带括号的类型 ID。

在您的情况下,由于fun()返回int *(编译器知道这一点,因为您告诉过它),就好像您要求sizeof(int *).


推荐阅读