【问题标题】:How can a sizeof operator calculate size of return type of a function?sizeof 运算符如何计算函数返回类型的大小?
【发布时间】: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++ 中的编译时运算符。没有什么是“调用”、“存储”或“计算”的。您自己显式声明了函数返回类型。编译器知道它的大小。这就是所有需要的。不需要任何“静态变量”。
  • 好的,那么它应该如何测量返回类型的大小。只看函数声明。

标签: c++ sizeof


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 2019-06-25
    相关资源
    最近更新 更多