sizeof遇到自增的情况

举报
无敌清风蓝 发表于 2023/08/02 11:31:04 2023/08/02
【摘要】 有趣的问题

1.导言

本来是在C++群里回答一个很简单的类型转换后判断字节的问题,后来发现代码中有个点还蛮有意思的,所以记录下来

2.场景

有这个代码

int a = 5;
sizeof(a++);
cout << a << endl;

我发现a竟然输出的5,来想自增后不是变成6吗

这是因为 sizeof 是一个编译时运算符,它不会对其操作数进行求值。在这个例子中,sizeof(a++) 只会返回变量 a 的大小,而不会执行 a++ 这个操作。所以,当输出 a 的值时,它仍然是初始值 5。

如果把代码改为

sizeof(b = a + 5);

b不会变成10,和上一个例子一样,sizeof 是一个编译时运算符,它不会对其操作数进行求值。所以,即使你写 sizeof(b = a + 6)b 的值也不会改变

3.原理

sizeof 是一个编译时运算符,这意味着它在编译时就会计算出结果。编译器会根据操作数的类型来确定 sizeof 的结果,而不是根据操作数的值。因此,即使操作数是一个表达式,sizeof 也不会对它进行求值。

也可以理解为sizeof里面如果有等号的话,等号右边的东西都是没用的

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。