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() 中使用相同的乐趣,则首先调用它,然后进行进一步的计算。
解决方案
不,sizeof
从不评估其操作数(C 可变长度数组除外,但由于这是一个 C++ 问题,因此无关紧要)。来自C++17 [expr.sizeof]
:
sizeof 运算符产生其操作数的对象表示中的字节数。操作数要么是一个表达式,它是一个未计算的操作数(第 8 条),要么是一个带括号的类型 ID。
在您的情况下,由于fun()
返回int *
(编译器知道这一点,因为您告诉过它),就好像您要求sizeof(int *)
.
推荐阅读
- javascript - Cypress.io - 根据 cy.route() 中的请求参数以编程方式设置响应
- angular - 如何在 nativescript 中访问 webpack 环境变量?
- angular - RxJS HTTP-Client:非 JSON 的响应类型
- kubernetes - 配置 minikuke kube-system cpu 限制
- python - SQLAlchemy 与来自同一父列的 2 个 ForeinKeys 的子关系
- spring - Spring Data REST中具有多对多关系的POST请求
- python - 什么是有效的 appJar 拉伸函数参数
- vba - VBA For Excel (CSV),循环文件以获取行,然后将行附加到一个列表中
- c++ - 从创建的类中获取用户输入
- javascript - Express Route 处理程序未针对文件类型路径触发